C++递归方法实现全排列
2024-08-31 11:05:54
#include<iostream>
using namespace std;
void perm(int list[],int k,int m);//声明
void perm(int list[],int k,int m)//调用
{
if(k==m)//相等则输出,总是输出最后一层。
{
for(int j=;j<=m;j++)
{
cout<<list[j];
}
cout<<endl;
}
else
{
for(int i=k;i<=m;i++)
{
swap(list[k],list[i]);//第一层,先和自己换。1和1换,2和2换,3就相等然后输出了。输出后回来,2和3换。
perm(list,k+,m);
swap(list[k],list[i]);//将前面换回的顺序再换回来,防止变顺序。
}
}
} int main()
{
//char a[7]="123456";
int a[]={,,};
perm(a,,);
system("pause");
return ;
}
逻辑顺序:
第一层循环3次:
k=0,i=k=0,list[0]和list[0]交换。然后递归调用k+1=1,2
进入第二层,循环2次:
k=1,i=k=1,list[1]和list[1]交换,然后递归调用k+1=2,2
此时相等,输出结果,0,1,2(相当于没有循环或者循环1次)
然后回到第二层,循环第二层的第2次
k=1,i=k+1=2,list[1]和list[2]交换,然后递归调用k+1=2,2
此时相等,输出0,2,1
然后回到第一层,循环第一层的第2次,后面同次过程。
最新文章
- 网站开发常用cmd命令
- python之初级学习
- PBR实现
- iOS二维码扫描IOS7系统实现
- 【转】Nginx服务器的反向代理proxy_pass配置方法讲解
- 关于 app测试工具
- UBUNTU下SUBLIME TEXT3的安装+破解+汉化+中文输入
- 从零开始学ios开发(四):IOS控件(1),Image View、Text Field、Keyboard
- HDU 1312 Red and Black DFS(深度优先搜索) 和 BFS(广度优先搜索)
- JDK1.5中线程池,定时器知识
- jsp include 乱码问题的解决
- Win7 64位 php+Apache+mysql 配置
- jquery扩展方法
- OpenGL编译问题随手记
- es6学习笔记-async函数
- 深入分析volatile的实现原理
- 《Linux就该这么学》第十六天课程
- php变量详细讲解
- Netty 零拷贝(一)NIO 对零拷贝的支持
- JavaScript基础进阶之常用字符串方法总结
热门文章
- ASP.NET MVC5 :Attribute路由使用详解
- 教你十分钟构建好 SpringBoot + SSM 框架
- <;constant name=";struts.devMode"; value=";true"; />;
- GROUP BY 和 ORDER BY 的一起使用
- yii2.0 表单小部件常用的默认选中
- wcf的Contract中name的使用
- Android4.0设置界面改动总结(二)
- pthread_create()创建线程时传入多个參数
- 婚礼上的谎言(C++实现)
- 三种数据库日期转字符串对照sql server、oracle、mysql(V4.11)