zoukankan      html  css  js  c++  java
  • [HDU 2181] 哈密顿绕行世界问题

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

    解题思路:dfs遍历出所有的路径,遍历过程中用记录当前点的前缀,每次搜到一条道路直接递归输出即可

    AC代码:

    #include <iostream>
    #include <cstdio>
    #include <vector>
    #include <cstring>
    
    using namespace std;
    
    const int maxn = 21;
    
    int pre[maxn];
    bool vis[maxn];
    int m, k;
    vector<int> vec[maxn];
    
    void print(int u) {
        if (u == m) return;
        print(pre[u]);
        printf(" %d", u);
    }
    
    void DFS(int u, int cnt) {
        if (u == m && cnt == 20) {
            printf("%d:  %d", k++, m);
            print(pre[u]);
            printf(" %d
    ", m);
            return;
        }
        for (int i = 0; i <= 2; i++) {
            int v = vec[u][i];
            if (!vis[v]) {
                vis[v] = true;
                pre[v] = u;
                DFS(v, cnt + 1);
                vis[v] = false;
            }
        }
    }
    
    int main() {
        for (int i = 0; i < maxn; i++) {
            vec[i].clear();
        }
        int a, b, c;
        for (int i = 1; i <= 20; i++) {
            scanf("%d%d%d", &a, &b, &c);
            vec[i].push_back(a);
            vec[i].push_back(b);
            vec[i].push_back(c);
        }
        while (scanf("%d", &m) && m) {
            memset(vis, false, sizeof(vis));
            memset(pre, 0, sizeof(pre));
            k = 1;
            DFS(m, 0);
        }
        return 0;
    }
    
  • 相关阅读:
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    Evanyou Blog 彩带
    《C++常见问题及解答》
  • 原文地址:https://www.cnblogs.com/youpeng/p/10829861.html
Copyright © 2011-2022 走看看