C语言 排列组合算法

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

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

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



  1. #include<stdio.h>
  2. #define maxsize 4
  3.  
  4. int newarr[maxsize];
  5. bool visit[maxsize];
  6.  
  7. void dfs(int x[],int index){
  8. if(index==maxsize){
  9. for(int j=0;j<maxsize;j++){
  10. printf("%d",newarr[j]);
  11. }
  12. printf("\n");
  13. }
  14. for(int i=0;i<maxsize;i++){
  15. if(!visit[i]){
  16. visit[i] = true;
  17. newarr[index] = x[i];
  18. dfs(x,index+1);
  19. visit[i] = false;
  20. }
  21. }
  22. }
  23.  
  24. void zuhe(int x[],int index,int num){
  25. if(index==num){
  26. for(int j=0;j<num;j++){
  27. printf("%d",newarr[j]);
  28. }
  29. printf("\n");
  30. }
  31. for(int i=0;i<maxsize;i++){
  32. if(!visit[i]){
  33. visit[i] = true;
  34. newarr[index] = x[i];
  35. zuhe(x,index+1,num);
  36. visit[i] = false;
  37. }
  38. }
  39. }
  40.  
  41. int main(){
  42. // 实现全排列 和 组合算法
  43. int x[] = {1,5,9,8};
  44. //实现全排列
  45. dfs(x,0);
  46. //实现组合5选2
  47. printf("\n");
  48. zuhe(x,0,2);
  49. return 0;
  50. }
本博客所有文章如无特别注明均为原创。作者:老薛pvp复制或转载请以超链接形式注明转自 老薛博客 - 专业分享技术文章
原文地址《C语言 排列组合算法

相关推荐

发表评论

路人甲 表情
看不清楚?点图切换 Ctrl+Enter快速提交

网友评论(0)