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


    题目: 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("
    ");
        }
        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
    ", 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;
    }
    简洁写法
  • 相关阅读:
    5 输出的properties文件按照key进行排序
    JFinal 部署在 Tomcat 下推荐方法(转)
    15个必须知道的chrome开发者技巧(转)
    一次完整的浏览器请求流程(转)
    工作第一天
    Struts2的crud
    equal 和 ==
    生成Apk遇到的问题
    Http Framework
    Gradle: The New Android Build System
  • 原文地址:https://www.cnblogs.com/soTired/p/4811774.html
Copyright © 2020-2023  润新知