C语言 排列组合算法
字数
197 字
阅读时间
1 分钟
更新日期
3/26/2017
参加某个比赛,好多题目需要暴力破解,需要生成很多排列组合
算法递归实现,,看了好久才明白代码的意思 。
就是对每个位置的数字循环,利用递归的特性和在一起。
cpp
#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;
}