码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2181 哈密顿绕行世界问题

时间:2014-10-12 14:49:38      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   for   sp   div   

 说来很惭愧 ,最近一直 在做 搜索类的题目,这类搞了好久也没搞出来0 0,可能是分析问题的能力不够强,还需要多多训练..

最后参考了高手的代码,的确值得借鉴学习的..以前也做过素数环啊,一模一样,这题咋做不出来,值得深思啊..

 1 #include<iostream>
 2 using namespace std;
 3 #define maxn 20
 4 int matrix[maxn+1][maxn+1],arr[maxn+1];
 5 bool  visited[maxn+1];
 6 int m,count = 1;
 7 void dfs(int val,int num)   //val为当前走的城市,num为已走的城市个数
 8 {
 9     int i;
10     arr[num] = val;//标记可以走的位置
11     visited[val] = true;
12     if(num == maxn)
13     {
14         if(matrix[val][m])//地点为val的城市能回到原点
15         {
16             printf("%d: ",count++);
17             for(i = 1; i <= maxn; i++)
18                 printf(" %d",arr[i]);
19             printf(" %d",m);
20             printf("\n");
21         }
22     }
23     else
24     {
25         for(i = 1; i <= maxn; i++)
26             if(!visited[i] && matrix[val][i])
27                 dfs(i,num+1);
28     }
29     visited[val] = false;
30 }
31 int main() 
32 {
33    // freopen("2181.txt","r",stdin);
34     int i,j,a,b,c;
35     memset(matrix,0,sizeof(matrix));
36     for(i = 1; i <= maxn; i++)
37     {
38         scanf("%d%d%d",&a,&b,&c);
39         matrix[i][a] = matrix[i][b] = matrix[i][c] = 1;//将该点和相连的点标记
40     }
41     while(scanf("%d",&m) && m)
42     {
43         memset(visited,false,sizeof(visited));
44         dfs(m,1);
45     }
46     return 0;
47 }

 

HDU 2181 哈密顿绕行世界问题

标签:style   blog   color   io   os   ar   for   sp   div   

原文地址:http://www.cnblogs.com/xiaoniuniu/p/4020480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!