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;
}

 

posted @ 2012-10-12 10:55  sorryhao  阅读(210)  评论(0)    收藏  举报