全排列与组合算法

全排列与组合算法

正在准备进军电设的比赛的加油当当在分析电流的时候发现了组合的重要性,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);
}

没了~当当溜了。

阅读更多
版权声明: https://blog.csdn.net/jiayoudangdang/article/details/80299565
个人分类: c++简单算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭