`
#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;
}
本文详细介绍了一种使用C++实现的全排列算法,通过深度优先搜索(DFS)递归方式,对指定数量的整数进行全排列。文章中包含完整的代码示例,展示了如何通过标记已访问过的元素来避免重复排列,适用于初学者理解和实践。
159

被折叠的 条评论
为什么被折叠?



