- 代码要求:实现n的全排列
- 输入样例:3
- 输出样例:123 132 213 231 312 321
- 代码
#include <iostream>
#include <cstdio>
using namespace std;
int a[10], book[10], n;//全局变量若没有赋值默认为0
void dfs(int step) {//深度优先搜索
if (step == n + 1) {
for (int i = 1; i <= n; i++)
cout << a[i];
cout << endl;
return;//有的编译器可以不写也没问题,但有的编译器不支持
//所以还是必须写上吧确保万无一失
//这里的return可以理解成break,跳出一层函数
//比如说3的全排列,递归进入dfs(1),在dfs(1)里面又递归调用了dfs(2),
//在dfs(2)里面递归调用了dfs(3);然后在dfs(3)里调用dfs(4)
//在dfs(4)里输出结果,执行return语句
//这里应该是相当于break结束一层函数,也就是结束dfs(4),返回dfs(3)
//以此类推,直到结束
}
for (int i = 1; i <= n; i++) {
if (book[i] == 0) {
a[step] = i;//填数字
book[i] = 1;//标记数字
dfs(step + 1);//递归调用
//这里可以理解成函数里有函数,一层一层展开
book[i] = 0;//回收数字
}
}
return;
}
int main() {
cin >> n;
dfs(1);
return 0;
}