HDU2181 dfs递归回溯

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<map>
#include<queue>
using namespace std;;
int h,m=1;
int mp[25][25],vis[25],a[25];
void dfs(int step,int c)///递归回溯
{
int i;
a[c]=step;
if(c==20)///返回条件
{
if(mp[step][h])
{
printf("%d: ",m++);
for(i=1; i<=20; i++)
printf(" %d",a[i]);
printf(" %d\n",h);
}
return;
}

for(i=1; i<=20; i++)
{
if(mp[step][i]&&!vis[i])
{
vis[i]=1;
dfs(i,c+1);
vis[i]=0;
}
}

}
int main()
{
int aa,b,c;
memset(mp,0,sizeof(mp));
memset(a,0,sizeof(a));
for(int i=1; i<=20; i++)
{
scanf("%d%d%d",&aa,&b,&c);
mp[i][aa]=1;
mp[i][b]=1;
mp[i][c]=1;
}///利用邻接图存储信息
while(scanf("%d",&h)&&h)
{
memset(vis,0,sizeof(vis));
vis[h]=1;
m=1;
dfs(h,1);
}
return 0;
}

猜你喜欢

转载自www.cnblogs.com/zl1998/p/10811725.html