哈密顿绕行世界问题 HDU 2181

题意让你先输20行数表示20个城市及所相邻的三个城市(行数就是该城市),然后给你一个数,从这个(给的数就表示城市)城市出发走遍所有城市一次回到出发的城市;看着复杂,仔细想想是个不算太难的深搜题,主要你得能把20行的数看成类似的地图,然后需要注意定义一个整形数组存储能到达的城市最后按顺序输出就可以了。

代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
int mp[25][3];
int vis[25];
int ans[25];
int cas=1;
//int dd[8][2]={0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,1,-1,-1};
void dfs(int a,int len,int c)//核心代码,自己再理解理解这里就不过多解释了
{   int i,j,k;
vis[a]=1;
ans[len]=a;
 for(i=0;i<3;i++)
 {  int t=mp[a][i];
     if(t==c&&len==19)
     {
         printf("%d:  ",cas++);
         for(j=0;j<20;j++)
             printf("%d ",ans[j]);
         printf("%d
",c);
     }

     if(!vis[t])
        dfs(t,len+1,c);
 }
 vis[a]=0;
}



int main()
{   int i,j,m;
    for(i=1;i<=20;i++)
        scanf("%d%d%d",&mp[i][0],&mp[i][1],&mp[i][2]);

    while(~scanf("%d",&m),m!=0)
    {   memset(vis,0,sizeof(vis));
        dfs(m,0,m);
    }

}
原文地址:https://www.cnblogs.com/nr1999/p/8530599.html