全排列问题
作者:互联网
全排列问题
思路: 定义一个函数,函数里的变量用于计数。数组用于放数,数组b表示位置标记(为了方便在一个序列中数字不重复)。从1开始深搜,搜索时运用回溯判定即可。然后就是找出口,出口当然是搜索次数 大于n或者等于n + 1的时候,进行输出。
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[101],b[101];
void dfs(int x)
{
if(x==n+1)//个数满足
{
for(int i=1;i<=n;i++)//输出
printf("%5d",a[i]);
cout<<endl;
return;
}
for(int i=1;i<=n;i++)
{
if(b[i]==0)//未被标记
{
a[x]=i;//保存
b[i]=1;//标记
dfs(x+1);//进行下一轮递归
b[i]=0;//清空标记
}
}
}
int main()
{
cin>>n;
dfs(1);//从1开始深搜
return 0;
}
标签:排列,return,标记,int,dfs,问题,101,include 来源: https://www.cnblogs.com/xdzxyingrui/p/16616012.html