其他分享
首页 > 其他分享> > 全排列问题

全排列问题

作者:互联网

全排列问题

思路: 定义一个函数,函数里的变量用于计数。数组用于放数,数组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