递归实现全排列(一)
2015-06-07 21:39
295 查看
【思路】
下面用具体例子来阐述这种实现的思路,例如实现123的全排列组合。要求123的全排列,可以分为以下情况:
情况1:第0位为1+23的全排列
情况2:第0位为2+13的全排列
情况3:第0位为3+32的全排列
上面的情况用代码实现如下:
//情况1 //为了跟下面一致,加上swap(list[0],list[0]); perm(list,1,2); //为了跟下面一致,加上swap(list[0],list[0]); //情况2 swap(list[0],list[1]); perm(list,1,2); swap(list[0],list[1]); //情况3 swap(list[0],list[2]); perm(list,1,2); swap(list[0],list[2]);
这3种情况可以用循坏代替:
for(int i=0;i<=2;i++) { swap(list[0],list[i]); perm(list,1,2); swap(list[0],list[i]); }
【全排列实现代码一】
#include<iostream> using namespace std; void perm(char list[],int k,int m); void perm(char list[],int k,int m) { if(k==m) { for(int j=0;j<=m;j++) { cout<<list[j]; } cout<<endl; } else { for(int i=k;i<=m;i++) { std::swap(list[k],list[i]); perm(list,k+1,m); std::swap(list[k],list[i]); } } } int main() { char a[]="123"; perm(a,0,2); system("pause"); return 0; }
相关文章推荐
- java中间件学习1-java中间件的定义
- hdu 2056
- 初学Linux 命令
- mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication解决办法
- LeetCode --- Add Binary
- 移动平台WEB前端开发技巧汇总
- ios UI学前须知
- iOS开发网络—03HTTP协议
- 设计类图
- 小Q系列故事――为什么时光不能倒流
- 初识Linux-C/C++开发环境
- Remove Duplicates from Sorted Array
- win8下安装kali Linux
- iOS开发网络—02搭建本地服务器
- django学习
- Python Function Definition and Funcion Call Discussion
- Markdown学习(六)
- LeetCode Regular Expression Matching
- SuperSlide的使用
- 使用 Apache POI读取EXCEL文件