全排列递归算法
来源:互联网 发布:js disabled 失效 编辑:程序博客网 时间:2024/05/20 18:45
设计一个递归算法生成n个元素的全排列。
算法思想:递归算法的思路比较接近于我们现实生活中的思路。
1.试想,我们只有两个数字:12.要对它进行全排列,第一种方式就是12本身,第二种,将12交换,变为21即可。这提示了我们一种交换的思路。
2.但这概括的并不全面。试想,我们要对123进行全排列。我们可以采用将1固定,“23”进行全排列,将“2”固定,对“13”进行全排列。将“3”固定,对“12”进行全排列。
这其实就是首部为”1“,然后是“2”,然后是“3”,不就是第二位后边的数依次和第一位进行交换么?这是典型的递归的思路。
3.但是,这样也不全面,我们每次交换要将排列恢复成为原始的“123”,因为这个算法求排列的时候,前后并没有依赖性,其参考物只有“123”这个原始的第一个排列。否则,如果我们不恢复的话,就会出现,虽然数量与正确解法相同,但是会有重复的排列的现象。
#include<iostream>using namespace std;int count = 0;void perm(int* buf, int start, int end, int num){if(start >= end){for(int i = 0; i < num; i ++)cout<<buf[i];cout<<endl; count ++;}else{for(int i = start; i <= end; i ++){swap(buf[start], buf[i]);perm(buf, start+1, end, num);swap(buf[start], buf[i]);//PS: 恢复原样 }}}int main(){ int num;//全排列的长度 cout<<"Number:"<<endl; cin>>num; int * buf = new int[num];//动态生成全排列的数组 //初始化 for (int i = 0; i < num; i ++) { buf[i] = i+1; } perm(buf, 0, num-1, num); cout<<"Count = "<< count; return 0;}
1 0
- 全排列递归算法
- 全排列递归算法
- 全排列算法-递归
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 递归算法---全排列
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 全排列递归算法
- 简述handler实现异步操作
- 贝叶斯基本公式与理解
- pig mysql 写法比较
- HDU 1020 Encoding
- 超越发展理论
- 全排列递归算法
- SQL简介
- id & instancetype 的区别
- spark大数据应用
- android 日历源码
- JavaScript高级程序设计第15章(使用Canvas)
- 145Binary Tree Postorder Traversal
- T-SQL
- API & SPI