AcWing 842. 排列数字
原题链接
简单
作者:
Tighanri
,
2023-11-13 16:44:27
,
所有人可见
,
阅读 47
#include<iostream>
using namespace std;
const int N=10;
int path[N];// 记录全排列的每一位上的数字
bool visited[N];// 记录那些数字被用过
int n;
void dfs(int u)
{
if(u==n)//如果用过的数等于题目要求的个数,就把它打印出来
{
for(int i=0;i<n;++i)
cout<<path[i]<<" ";
cout<<endl;
return ;
}
for(int i=1;i<=n;++i)
if(!visited[i])//visited的下标代表数字,如果这个数没有用过,就把它加到path中
{
path[u]=i;//把数加入路径数组中
visited[i]=true;//标记为用过
dfs(u+1);//先下一个位置继续寻找没有用过的数
visited[i]=false;//寻找当前答案后,要回溯,保证下次寻找还可以用这次排列过的数字
//因为相同的数可以出现在不同排列中,只是不能出现在同一个排列中
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}