UVA208 一直WA,样例过了,自造数据也都是对的,求hack
查看原帖
UVA208 一直WA,样例过了,自造数据也都是对的,求hack
235696
muvum楼主2021/2/16 10:18

Code:

#include <cstring>
#include <iostream>
#define MAXN 25
#define max(x, y) (x) > (y) ? (x) : (y)

int n, k, cnt, f[MAXN], next[MAXN];
bool g[MAXN][MAXN], vis[MAXN];


// 并查集判断是否连通
int find(int x) {
    return f[x] == x ? f[x] : f[x] = find(f[x]);
}

void merge(int x, int y) {
    int fx = find(x), fy = find(y);
    if (fx != fy) {
        f[fy] = fx;
    }
}

void print_path() {// 输出路径
    for (int u=1; u!=k; u=next[u])
        std::cout << " " << u;
    std::cout << " " << k << '\n';
}

void find_path(int u) {
    if (find(u) != find(k)) return;
    if (u == k) {
        cnt++;
        print_path();
        return;
    }
    for (int v=1; v<=n; v++)
        if (g[u][v] && !vis[v]) {
            vis[v] = true;
            next[u] = v;
            find_path(v);
            vis[v] = false;
        }
}

void build_graph() { // 输入
    int u, v;
    while (std::cin >> u >> v && u != 0) {
        g[u][v] = g[v][u] = true;
        merge(u, v);
        n = max(max(u, v), n);
    }
}

int main(void) {
    std::ios::sync_with_stdio(false);

    int _case = 0;
    while (std::cin >> k) {
        cnt = 0;
        memset(g, 0, sizeof(g));
        memset(next, 0, sizeof(next));
        for (int i=1; i<=MAXN; i++) f[i] = i;

        build_graph();
        std::cout << "CASE " << ++_case << ":\n";
        vis[1] = true;
        find_path(1);
        vis[1] = false;
        std::cout << "There are " << cnt << " routes from the" 
                  << " firestation to streetcorner " << k << ".\n";
    }
    return 0;
}
2021/2/16 10:18
加载中...