hdu2181 哈密尔顿dfs

 1 #include<stdio.h>
 2 #include<string.h>
 3 int hash[25],map[25][5],m,k,jilu[25];
 4 void dfs(int now,int step)
 5 {
 6     int i,judge;
 7     jilu[step]=now;
 8     if (step==20)
 9     {
10     judge=0;
11     for (i=1;i<=3;i++)
12      if (map[now][i]==m) judge=1;
13     if (judge==1) k++; else return;
14     printf("%d: ",k);
15     for (i=1;i<=20;i++) printf(" %d",jilu[i]);
16     printf(" %d\n",m);
17     }
18     hash[now]=1;
19     for (i=1;i<=3;i++)
20      if (hash[map[now][i]]==0) dfs(map[now][i],step+1);
21     hash[now]=0;
22     return;
23 }
24 int main()
25 {
26     int i,j;
27     memset(map,0,sizeof(map));
28     for (i=1;i<=20;i++)
29      for (j=1;j<=3;j++)
30      {
31          scanf("%d",&m);
32          map[i][j]=m;
33      }
34     while (~scanf("%d",&m)&&m!=0)
35     {
36         k=0;
37         memset(hash,0,sizeof(hash));
38         dfs(m,1); 
39     }
40     return(0);
41 }

http://acm.hdu.edu.cn/showproblem.php?pid=2181

posted on 2014-07-16 16:21  xiao_xin  阅读(86)  评论(0编辑  收藏  举报

导航