//全排序dfs深搜+回溯算法
#include<iostream>
#include<string.h>
using namespace std;
int a[100];//全排序中间结果记录数组
int n;//需要全排序对象a[]数量.
int count=0;//n个数全排序的排序数目
int vis[100];//访问标识 0可访问,1不可访问
void dfs(int d)
{
int i;
if(d==n)//当全部数已经放完,即一个排序结果出来
{
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
count++;
if(count==10)//输出10个排序结果后 退出系统.
exit(1);
return ;//返回上一级操作
}
else
{
for(i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;//将i的访问标识设置为1,表示不可访问
a[d]=i; //将i放入到下标为d的位置
dfs(d+1);//继续将剩余的数放入下一个位置d+1.
vis[i]=0;//回溯,将i的访问标识设置为0,表示可访问
}
}
}
}
int main()
{
cin>>n;
int i;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)//输入a[] 1~n的数字
a[i-1]=i;
dfs(0);
cout<<count<<endl;//输出排序结果总数量
return 0;
}
全排序dfs深搜回溯法
最新推荐文章于 2024-05-13 13:25:42 发布