问题:输入n,输出n的全排列。
https://www.luogu.com.cn/problem/P1706
例:输入:3
输出:1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
注意:洛谷这题要记得输出空格
#include<bits/stdc++.h>
using namespace std;
const int N=10050;
int a[N],vis[N];//vis[N]:做标记
//a[N]表示不同位数的数,如:从第一位为1开始dfs(num+1)即第一位为1的情况下第二位为...
int n;
void dfs(int num)
{
if(num>n)//3位数都枚举完以后,第四位开始即结束循环
{
for(int i=1;i<=n;i++)
cout<<" "<<a[i];//注意:洛谷这道题空格这算是个坑!!!
cout<<endl;
}
else
{
for(int i=1;i<=n;i++)
{
if(vis[i]==0)//未标记
{
vis[i]=1;//做标记
a[num]=i;//第num位为i
dfs(num+1);//枚举下一位
vis[i]=0;//回溯,清除标记,使下一次得以循环
}
}
}
}
int main()
{
cin>>n;
dfs(1);//从第一位开始递归
return 0;
}
这道题c++<algorithm>里有全排列函数可以直接用,但这里主要讲的是DFS所以不再涉及
感兴趣的可以去题解 P1706 【全排列问题】 - 洛谷专栏这个链接看看