HDU 2181 哈密顿绕行世界问题【DFS】

题意:给出一个十二面体,它的每个顶点是一个城市,从一个城市m出发并回到m,输出所有可行的路径

先把边记录下来,再深搜

 1 #include<iostream>  

 2 #include<cstdio>  

 3 #include<cstring> 

 4 #include <cmath> 

 5 #include<stack>

 6 #include<vector>

 7 #include<map> 

 8 #include<set>

 9 #include<queue> 

10 #include<algorithm>  

11 using namespace std;

12 

13 typedef long long LL;

14 const int INF = (1<<30)-1;

15 const int mod=1000000007;

16 const int maxn=1000005;

17 

18 int g[105][105];

19 int ans[maxn];

20 int s,kase,m;

21 

22 void dfs(int a){

23     if(a==m&&s==21){

24         printf("%d:  ",++kase);

25         for(int i=0;i<20;i++) printf("%d ",ans[i]);

26         printf("%d\n",ans[20]);

27         return;

28     }

29     

30     for(int i=1;i<=20;i++){

31         if(g[a][i]){

32             ans[s++]=i;

33             g[a][i]=g[i][a]=0;

34             dfs(i);

35         //    printf("dfs(%d)\n",i);

36             g[a][i]=g[i][a]=1;

37             s--;

38         }

39     }

40     

41 }

42 

43 

44 int main(){

45     memset(g,0,sizeof(g));

46     for(int i=1;i <= 20; i++){

47         int a,b,c;

48         scanf("%d %d %d",&a,&b,&c);

49         g[i][a]=1;

50         g[i][b]=1;

51         g[i][c]=1;

52     }

53     while(scanf("%d",&m)!=EOF&&m){

54         s=1;ans[0]=m;kase=0;

55         dfs(m);    

56     }

57     return 0;

58 }
View Code

 

你可能感兴趣的:(HDU)