hdu 2181哈密顿绕行世界问题 dfs

来源:互联网 发布:windows apache https 编辑:程序博客网 时间:2024/06/13 20:29

传送门:hdu 2181

中文题就不多说了,唯一值得注意的一点是dfs到最后cnt==20的时候要先判断最后一个城市和第一个城市连不连通再输出。

#include <iostream>#include <cstdio>#include <cstring>int map[22][22];int book[22];int line[22];int t=0,m;using namespace std;int dfs(int cnt){if(cnt==20){if(map[line[cnt-1]][m])//判断最后一个城市和第一个城市之间有没有边{printf("%d:  ",++t);printf("%d",m);for(int i=1;i<20;i++){printf(" %d",line[i]);}printf(" %d\n",m);}return 0;}for(int i=1;i<=20;i++){if(!book[i]&&map[line[cnt-1]][i]){book[i]=1;line[cnt]=i;dfs(cnt+1);book[i]=0;}}return 0;}int main(){int a,b,c;memset(map,0,sizeof(map));for(int i=1;i<=20;i++){scanf("%d%d%d",&a,&b,&c);map[i][a]=1;map[i][b]=1;map[i][c]=1;}/*for(int i=1;i<=21;i++){for(int j=1;j<=20;j++)printf("%d ",map[i][j]);putchar('\n');}*/while(scanf("%d",&m)&&m){memset(book,0,sizeof(book));line[0]=m;book[m]=1;t=0;dfs(1);}return 0;}

0 0
原创粉丝点击