码迷,mamicode.com
首页 > 其他好文 > 详细

杭电2181--哈密顿绕行世界问题(Dfs)

时间:2015-09-15 23:17:49      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

题目: http://acm.hdu.edu.cn/showproblem.php?pid=2181

 

好像很久没有刷题了, 真的是手生到不要不要的, 这道应该很明显就是Dfs, 然而我第一眼看上去竟然没有什么感觉, 还是看题解解出来的。 看来以后每天要至少A道题保持手感了。

 

//这个比较好理解, 算是一种比较常规的写法了; 
#include <cstdio>
#include <cstring>
#include <iostream> 
using namespace std;
int map[21][21], dis[21], vis[21], ge, num, m, Q;
void Dfs(int x)
{
    int k;
    dis[num++] = x;             //标记开始节点; 
    vis[x] = 1;
    if(num == 20 && map[x][m])  //回到开始城市;
    {
        printf("%d:  ", ++Q);
        
        for(int i = 0; i < 20; i++)
            printf("%d ", dis[i]);
        printf("%d", m);
        printf("\n");
    }
    for(int k = 1; k <= 20; k++)
    {
        if(!vis[k] && map[x][k])
        {
            Dfs(k);
            vis[k] = 0;
            num--;
        }
    }
}
int main() { int a, b, c, i, j, t; for(int i = 1; i <= 20; i++) { for(int j = 1; j <= 3; j++) { scanf("%d", &t); map[i][t] = 1; } } while(~scanf("%d", &m), m) { Q = 0; num = 0; memset(vis, 0, sizeof(vis)); memset(dis, 0, sizeof(dis)); Dfs(m); } return 0; }

 

技术分享
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std; 
int map[21][3], dis[21], vis[21], Q;
void Dfs(int a, int n, int A)
{
    dis[n] = a;
    vis[a] = 1;
    int i, j; 
    for(int i = 0; i < 3; i++)
    {
        int s = map[a][i];
        if(n == 19 && s == A)
        {
            printf("%d:  ", ++Q);
            for(int j = 0; j < 20; j++)
                printf("%d ", dis[j]);
            printf("%d\n", A);
        }
        if(!vis[s])
            Dfs(s, n + 1, A);
    }
    vis[a] = 0;
}
int main()
{
    for(int i = 1; i <= 20; i++)
        scanf("%d %d %d", &map[i][0], &map[i][1], &map[i][2]);
    int M;
    while(~scanf("%d", &M), M)
    {
        Q = 0;
        memset(vis, 0, sizeof(vis));        
        Dfs(M, 0, M);
    }
    return 0;
}
简洁写法

 

杭电2181--哈密顿绕行世界问题(Dfs)

标签:

原文地址:http://www.cnblogs.com/fengshun/p/4811774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!