全排列与组合算法
正在准备进军电设的比赛的加油当当在分析电流的时候发现了组合的重要性,7种不同的电流手算组合几乎是不可能了,所以当当想到了编程,(*^▽^*)~~上代码:
全排列算法
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int ans[4]= {1,2,3,4};
sort(ans,ans+4); /* 这个sort可以不用,因为{1,2,3,4}已经排好序*/
do { /*注意这步,如果是while循环,则需要提前输出*/
for(int i=0; i<4; ++i)
cout<<ans[i]<<" ";
cout<<endl;
} while(next_permutation(ans,ans+4));
return 0;
}
组合算法
#include <iostream>
using namespace std;
int N = 9;
int a[] = {1,2,3,4,5,6,7,8,9};
int b[1000];
int r = 4;
char used[1000];
int count;
void combine(int pos) {
int i;
if(pos==r) {
for(i = 0; i<r; i++) {
printf("%d ",a[b[i]]);
}
printf("\n");
count++;
return;
}
//这里是关键,第i个位置上的数,只能是从排在第i位的数开始的N-r个中的一个,后面的数一定要比前面的大
for(i = (pos>0?(b[pos-1]+1):pos); i<=pos+N-r; i++) {
if(!used[i]) {
b[pos] = i;
used[i]++;
combine(pos+1);
used[i]--;
}
}
}
int main() {
combine(0);
}
没了~当当溜了。