哈密顿绕行世界问题
原题链接:
点击打开链接
//深搜的题,读懂题意,搞清关系即可
#include <stdio.h>
#include <string.h>
int a[25][5];
int vis[25]; //标记走过的城市
int ans[25];//记录走过的城市
int der = 1; //输出编号
int c;
void dfs(int m,int i)
{
vis[m] = 1;
ans[i] = m;
for(int j = 0;j < 3;j ++ )
{
int t = a[m][j];
if(t == c && i == 19) //i=0时 t为c后的一个数,i=19时为c后的第20个数即其本身
{
printf("%d: ",der ++ );
for(int k = 0;k < 20;k ++ )
printf("%d ",ans[k]);
printf("%d\n",c);
}
if(!vis[t]) //没被标记进入下一层
dfs(t,i + 1);
}
vis[m] = 0;
}
int main()
{
int m,i;
for(i = 1;i <= 20;i ++ )
scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);
while(scanf("%d",&m) , m)
{
c = m;
memset(vis,0,sizeof(vis));
dfs(m,0);
}
return 0;
}