会飞的鱼

这里是
一个技术宅男的课后笔记

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. }

×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

打赏作者
版权所有,转载注意明处:FineDay » C语言 排列组合算法

发表评论

表情
看不清楚?点图切换

网友评论(0)