AcWing 842. 排列数字
原题链接
简单
作者:
王一博铁粉
,
2024-04-24 00:06:10
,
所有人可见
,
阅读 1
C++ 代码
#include <iostream>
using namespace std;
const int N = 10;
int n;
int path[N];//path这一整个数组记录的是一条能成功走通的路径
bool st[N];//给状态数组中元素的初始值都设为false
void dfs(int u)//u表示当前扫描到第几个元素
{
//第一种情况,u完美的走到了n,就是说走通了一条路径,那么就把这条路径给输出
if(u == n){
for(int i = 0; i < n; i ++){
printf("%d ", path[i]);
}
puts("");
}
//第二种情况,u < n,也就是说:当前路径还没有走完,并且还不确定这是不是一条成功的路径
for(int i = 1; i <= n; i ++){
if(!st[i])//!st[i]表示的是:当前这个点没有被访问过
{
path[u] = i;
st[i] = true;
dfs(u + 1);
st[i] = false;//超级重要,这一步!《恢复现场》。
}
}
}
int main()
{
scanf("%d", &n);
dfs(0);
return 0;
}