#include <iostream>
using namespace std;
int a[10], book[10], n;
void dfs(int step) ///step表示站在第几个盒子前面
{
if (step == n + 1) //站在第n+1个盒子前面,表示前n个盒子已经放好位置
{
//输出一种排列(1~n号盒子中扑克的编号)
for (int i = 1; i <= n; i++)
cout << a[i];
cout << endl;
return; //返回之前的一步(最近一次调用dfs的地方)
}
//此时站在第step个盒子前面
for (int i = 1; i <= n; i++)
{
if (book[i]==0) //0表示第i号扑克在手上
{
a[step] = i; ///将第i号扑克放在第step个盒子
book[i] = 1; //1表示扑克已不在手上
//第step个盒子已经放好,走到了第step+1个盒子面前
dfs(step + 1); //递归实现
book[i] = 0; //将尝试的扑克拿回来,才能继续下一次尝试
}
}
return;
}
int main()
{
cout << "输入1~9之间的整数:";
cin >> n;
dfs(1);
return 0;
}
DFS基本模型(啊哈算法)
最新推荐文章于 2022-03-15 18:12:31 发布