`
#include<iostream>
#include<vector>
using namespace std;
int n;
vector<int>ans;
vector<bool>rec;
void dfs(int &&count)
{
if(ans.size()==n)
{
for(auto p:ans)cout<<p<<" ";
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(!rec[i])//当前数没被访问过
{
ans.push_back(i);//如果是指定数组元素全排列这里可以修改为a[i];
rec[i]=true;//标记为访问过,排列与组合不同,排列需要标记因为后面dfs是从头开始遍历不能被选两次。
dfs(i+1);
ans.pop_back();
rec[i]=false;//回溯回来恢复状态
}
}
}
int main()
{
cin>>n;
rec=vector<bool>(n,false);
dfs(1);
return 0;
}
来源:https://blog.csdn.net/qtmatt/article/details/98942274