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 }


浙公网安备 33010602011771号