1.参考链接2.完整代码
1.参考链接
参考:啊哈算法[啊哈磊著]
第四章第1节:不撞南墙不回头——深度优先搜索
链接2:递归实现全排列问题
2.完整代码
#include <iostream>using namespace std;int a[10],book[10],n; //c语言的全局变量在没有赋值以前默认为0//book 表示已经使用的扑克牌,book[i]=1表示数字为i的扑克牌已经放进了箱子里。手中已经没有该扑克牌了。//book[i]=0表示i号扑克牌还在手上。void dfs(int step) //step表示此时站在第step个箱子面前。{if(step==n+1) //如果站在第n+1个箱子面前,则表示前n 个箱子已经放好扑克牌{for(int i=1;i<=n;i++){cout<<a[i]<<" ";}cout<<endl;return; //打印完毕一定要return,否则程序会一直运行下去。 ???为什么呢?}for(int i=1;i<=n;i++){if(book[i]==0){a[step]=i; //将i号扑克牌放到第step个盒子中。book[i]=1; //将book[i]设为1,表示该扑克牌已经不在手上了。dfs(step+1); //第step 个盒子已经放好扑克牌,接下来需要走到下一个盒子面前。book[i]=0; //这是非常重要的一步,一定要将刚才尝试的扑克牌收回,才能进行下一次尝试。//并不明白什么意思、、、、、}}return;}int main(){cin>>n;dfs(1); //首先站在第一个箱子面前。 从第一个箱子开始system("pause");return 0;}
运行结果:
31 2 31 3 22 1 32 3 13 1 23 2 1请按任意键继续. . .
如果觉得《全排列——深度优先搜索》对你有帮助,请点赞、收藏,并留下你的观点哦!