poj2181 哈密顿绕行世界问题

哈密顿绕行世界问题

原题链接:点击打开链接
//深搜的题,读懂题意,搞清关系即可

#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;
}


阅读更多
个人分类: 搜索
想对作者说点什么? 我来说一句
相关热词

没有更多推荐了,返回首页

关闭
关闭
关闭