递归实现集合全排列
2015-08-09 21:52
211 查看
/**递归对于我真的很那理解,好好的心情都被破坏了大化小,小化没,这就是递归 假设求 1,2,3,4,5的全排列就是求 1,2,3,4,5 2,1,3,4,5 3,2,1,4,5 4,2,3,1,5 5,2,3,4,1 后四个数的全排列然后在进行划分直到求得是最后两个数的全排列虽然我很菜, 但我也在慢慢的理解递归,感觉递归很重要,深搜基本都是递归实现的so,我要好好研究递归 有大神这么说,我感觉很有道理 ******************************************************************************************************************************** *(1)n个元素的全排列=(n-1个元素的全排列)+(另一个元素作为前缀); *(2)出口:如果只有一个元素的全排列,则说明已经排完,则输出数组; *(3)不断将每个元素放作第一个元素,然后将这个元素作为前缀,并将其余元素继续全排列,等到出口,出口出去后还需要还原数组; ******************************************************************************************************************************** */ #include<stdio.h> #include<algorithm> using namespace std; ///确定目标:实现对a[0]到a[maxDepth-1],全排列 void fun(int a[], int cur, int maxDepth) { if(cur == maxDepth)///递归的边界(剩下最后一个元素的时候) { for(int i = 0; i < maxDepth; i++) printf("%d ", a[i]); printf("\n"); } else for(int i = cur; i < maxDepth; i++) { swap(a[cur], a[i]); fun(a, cur+1, maxDepth); swap(a[cur], a[i]); } } int main() { int n,a[15]; while(scanf("%d",&n)) { for(int i = 0; i < n; i++) scanf("%d",&a[i]); fun(a, 0, n); } return 0; }
相关文章推荐
- 计蒜客 难题题库 018 跳跃游戏
- 多功能图片压缩工具 类
- SSH整合环境下Spring配置文件的配置
- JavaScript基础学习之-JavaScript权威指南第八章--函数
- java异常处理机制
- 计蒜客 难题题库 017 X的平方根
- Java常用排序算法/程序员必须掌握的8大排序算法
- LA4043 - Ants(二分图完备最佳匹配KM)
- java里的static和final
- Crond定时任务详细分析
- HTML基础(一)
- Linux - mail
- Linux - mail
- 计蒜客 难题题库 016 爬楼梯
- 第三方登录之新浪微博
- 计蒜之道2015程序设计大赛初赛第三场——腾讯手机地图
- 正则表达式的知识点汇总(一)
- Swing
- 计蒜客 难题题库 015 单独的数字
- [leetcode-89]Gray Code(c++)