C++库函数next_permutation的递归实现(数组全排列)
来源:互联网 发布:细说php第四版电子书 编辑:程序博客网 时间:2024/04/28 13:03
今天下午去了学校的机房,闲着没事做,和同学开了个VC6.0在那敲代码玩,最后同学说敲全排列吧,那就敲吧。
开始写了个纯的next_permutation函数的实现形式,但是是不能判重的,以前看过一个可以判重的代码,但是感觉写的比较烦,然后就没看了,所以说我今天之前就是不会写的,惭愧啊,要是那天面试考到这种弱智题我就傻B了,不扯淡了,上代码。
开始来个丑陋的代码鄙视下自己
void permutation(int *a,int cnt,int n){ if(cnt == n) { for(int i = 0 ; i < n ; i ++) cout<<a[i]<<" "; cout<<endl; } for(int i = cnt ; i < n ; i ++) { swap(a[i],a[cnt]); permutation(a,cnt+1,n); swap(a[i],a[cnt]); }}
下面来个可以判重的吧,学习了下同学的代码
void permutation(int *a,int *p, int cnt,int n){ if(cnt == n ) { for(int i = 0 ; i < n ; i ++) cout<<p[i]<<" "; cout<<endl; } else { for(int i = 0 ; i < n ; i ++) { if(!i || a[i-1] != a[i]) { int f1 = 0,f2 = 0; for(int j = 0 ; j < cnt ; j ++) if(a[i] == p[j]) f1 ++; for(int j = 0 ; j < n ; j ++) if(a[i] == a[j]) f2 ++; if(f1 < f2) { p[cnt] = a[i]; permutation(a,p,cnt+1,n); } } } }}
这段代码我目前还是不能太清楚的理解是怎么能够去重的。
我一直都是不会写DFS的,没想到还能把最简单的写出来,囧。
- C++库函数next_permutation的递归实现(数组全排列)
- 全排列(next_permutation,递归)
- next_permutation(求全排列的库函数)
- 全排列的生成使用C++的库函数:next_permutation
- 方格填数(STL next_permutation库函数(全排列)求解)+ next_permutation库函数样例讲解
- 递归实现数组全排列
- 数组全排列递归实现
- 全排列(一)next_permutation方式实现
- n个整数全排列的递归实现(C++)
- 全排列(next_permutation)
- next_permutation(全排列)
- STL实现全排列 next_permutation
- 库函数实现全排列
- 数字全排列的递归和非递归实现(C/C++)
- Java用递归实现的数组的全排列
- 求数组全排列算法的递归实现
- 全排列next_permutation()的用法
- 全排列的递归实现
- 蛇年谈程序员发展之路
- Compiler - Python VM Get Python25_d.dll Python25_d.lib
- DropDownlist的Item显示多列数据
- 黑马程序员--注解
- 2440中断寄存器详解
- C++库函数next_permutation的递归实现(数组全排列)
- 随想2
- Java 6 JVM参数选项大全
- VIM 总结
- 在IE中使用VS.net WinForm控件
- c/c++ 右左法则
- 关于typedef的用法总结
- 使用AWT制作图形界面登陆、注册
- 致软件学院的老师们的一封信