参加某个比赛,好多题目需要暴力破解,需要生成很多排列组合
算法递归实现,,看了好久才明白代码的意思 。
就是对每个位置的数字循环,利用递归的特性和在一起。
#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; }
发表评论