zoukankan      html  css  js  c++  java
  • 杭电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;
    }
    简洁写法
  • 相关阅读:
    Code Forces Gym 100886J Sockets(二分)
    CSU 1092 Barricade
    CodeChef Mahesh and his lost array
    CodeChef Gcd Queries
    CodeChef GCD2
    CodeChef Sereja and LCM(矩阵快速幂)
    CodeChef Sereja and GCD
    CodeChef Little Elephant and Balance
    CodeChef Count Substrings
    hdu 4001 To Miss Our Children Time( sort + DP )
  • 原文地址:https://www.cnblogs.com/soTired/p/4811774.html
Copyright © 2011-2022 走看看