hud2181----哈密顿绕行世界问题(搜索)

直接搜索就行了

View Code
 1 //Accepted    2181    0MS    216K    802 B    G++
 2 #include <stdio.h>
 3 #include <string.h>
 4 
 5 int map[21][21];
 6 int useif[21];
 7 int ans[21];
 8 int cases;
 9 int m;
10 void solve(int n,int d)
11 {
12     if(d > 20)
13     {
14         if(map[m][ans[20]] == 0)
15             return ;
16         ++cases;
17         printf("%d:  ",cases);
18         for(int i = 1; i <= 20; ++i)
19             printf("%d ",ans[i]);
20         printf("%d\n",m);
21         return ;    
22     }
23     for(int i = 1; i <= 20; ++i)
24     {
25         if(map[n][i] == 1 && useif[i] == 0)
26         {
27             ans[d] = i;
28             useif[i] = 1;
29             solve(i,d+1);
30             useif[i] = 0;
31         }
32     }
33 }
34 
35 
36 
37 int main(void)
38 {
39     int x,y,z;
40     for(int i = 1; i <= 20 ; ++i)
41     {
42         scanf("%d%d%d",&x,&y,&z);
43         map[i][x] = 1;
44         map[i][y] = 1;
45         map[i][z] = 1;
46     }
47     while(scanf("%d",&m)==1 && m)
48     {
49         cases = 0;
50         memset(useif,0,sizeof(useif));
51         ans[1] = m;
52         useif[m] = 1;
53         solve(m,2);
54     }    
55     return 0;
56 }
posted @ 2012-09-16 11:10  Wheat″  阅读(170)  评论(0)    收藏  举报