C语言 排列组合算法

参加某个比赛,好多题目需要暴力破解,需要生成很多排列组合

算法递归实现,,看了好久才明白代码的意思 。

就是对每个位置的数字循环,利用递归的特性和在一起。



#include<stdio.h>
#define maxsize 4

int newarr[maxsize];
bool visit[maxsize];

void dfs(int x[],int index){
	
	if(index==maxsize){
		for(int j=0;j<maxsize;j++){
			printf("%d",newarr[j]);
		}
		printf("\n");
	}
	
	for(int i=0;i<maxsize;i++){
		if(!visit[i]){
			visit[i] = true;
			newarr[index] = x[i];
			dfs(x,index+1);	
			visit[i] = false;
		}
			
	}
}

void zuhe(int x[],int index,int num){
	
	if(index==num){
		for(int j=0;j<num;j++){
			printf("%d",newarr[j]);
		}
		printf("\n");
	}
	
	
	for(int i=0;i<maxsize;i++){
		if(!visit[i]){
			visit[i] = true;
			newarr[index] = x[i];
			zuhe(x,index+1,num);	
			visit[i] = false;
		}
			
	}
}

int main(){
	// 实现全排列 和 组合算法 
	int x[] = {1,5,9,8};
	//实现全排列 
	dfs(x,0);
	//实现组合5选2 
	printf("\n");
	zuhe(x,0,2);
	return 0;
} 

相关推荐

发表评论

路人甲
看不清楚?点图切换

网友评论(1)

不错,学习了!
第一资源网 2年前 (2017-03-30) 回复