HDU 2181(哈密顿绕行世界问题)
/*简单DFS
Date: 2012/10/12
思路:和Prime Ring Problem基本一样
题目链接地址:http://acm.hdu.edu.cn/showproblem.php?pid=2181
*/
#include<iostream> using namespace std; #define maxn 20 int matrix[maxn+1][maxn+1],arr[maxn+1]; bool visited[maxn+1]; int m,count = 1; void dfs(int val,int num) //val为当前走的城市,num为已走的城市个数 { int i; arr[num] = val; visited[val] = true; if(num == maxn) { if(matrix[val][m]) { printf("%d: ",count++); for(i = 1; i <= maxn; i++) printf(" %d",arr[i]); printf(" %d",m); printf("\n"); } } else { for(i = 1; i <= maxn; i++) if(!visited[i] && matrix[val][i]) dfs(i,num+1); } visited[val] = false; } int main() { //freopen("1007.txt","r",stdin); int i,j,a,b,c; memset(matrix,0,sizeof(matrix)); for(i = 1; i <= maxn; i++) { scanf("%d%d%d",&a,&b,&c); matrix[i][a] = matrix[i][b] = matrix[i][c] = 1; } while(scanf("%d",&m) && m) { memset(visited,false,sizeof(visited)); dfs(m,1); } return 0; }

浙公网安备 33010602011771号