//经典DFS:全排列
#include<cstdio>
#include<iostream>
#include<algorithm>
const int N=10;
using namespace std;
int n,m,j,k;
int path[10];
bool st[10];//用于标记数字用过没
void dfs(int u)
{
int i;
if(u==n)//生成一个数
{
for(i=0;i<n;i++)
printf("%d ",path[i]);//输出一个数
puts("");//换行
return;//返回上一个dfs,不是直接回到第一层
}
for(i=1;i<=n;i++)
{
if(!st[i])//数字没被用过
{
path[u]=i;
st[i]=true;//标记数字
dfs(u+1);//递归下一位数字
st[i]=false;//恢复状态,都位于dfs递归后边
}
}
}
int main()
{
cin>>n;
dfs(0);//从0位开始遍历
return 0;
}
全排列(DFS)
于 2022-02-16 14:20:23 首次发布