hdu 2181 哈密顿绕行世界问题 (深搜)

来源:互联网 发布:金螳螂网络采购平台 编辑:程序博客网 时间:2024/05/17 06:33

回朔搜索;

#include"stdio.h"

#include"string.h"
int map[1000][10];
int mark[1000],sum[1000],m,t;
void bfs(int x,int s)
{
int i;
if(s==20&&(map[x][1]==m||map[x][2]==m||map[x][3]==m))
{
printf("%d:  ",t++);
for(i=0;i<20;i++)
printf("%d ",sum[i]);
printf("%d\n",m);
}
for(i=1;i<=3;i++)
{
if(mark[map[x][i]]==0)
{
mark[map[x][i]]=1;
sum[s]=map[x][i];
bfs(map[x][i],s+1);
mark[map[x][i]]=0;
}
}
}
int main()
{
int i,k,h,p;
memset(map,0,sizeof(map));
for(i=1;i<=20;i++)
{
scanf("%d%d%d",&h,&k,&p);
map[i][1]=h;
map[i][2]=k;
map[i][3]=p;
}
while(scanf("%d",&m),m)
{
t=1;
memset(mark,0,sizeof(mark));
sum[0]=m;
mark[m]=1;
bfs(m,1);
}
return 0;
}