Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1509 Accepted Submission(s): 959
#include <iostream> #include <cstring> #include <cstdio> #include <string> using namespace std; int MAP[25][25]; int VIS[25]; int ANS[25]; int M,COUNT; void dfs(int i,int k); int main(void) { int a,b,c; int m; memset(MAP,0,sizeof(MAP)); for(int i = 1;i <= 20;i ++) { scanf("%d%d%d",&a,&b,&c); MAP[i][a] = MAP[a][i] = 1; MAP[i][b] = MAP[b][i] = 1; MAP[i][c] = MAP[c][i] = 1; } while(scanf("%d",&M) && M) { memset(VIS,0,sizeof(VIS)); COUNT = 1; VIS[M] = 1; ANS[0] = M; dfs(M,1); } return 0; } void dfs(int num,int k) { int flag = 1; for(int i = 1;i <= 20;i ++) if(!VIS[i] && MAP[i][num]) { flag = 0; ANS[k] = i; VIS[i] = 1; dfs(i,k + 1); VIS[i] = 0; } if(k == 20 && MAP[ANS[19]][M]) { printf("%d: ",COUNT); for(int i = 0;i < 20;i ++) printf("%d ",ANS[i]); printf("%d\n",M); COUNT ++; } }
原文:http://www.cnblogs.com/xz816111/p/4366080.html