PTA特色题目 语言 stl语法 乱七八糟

7-32 哥尼斯堡的“七桥问题” (25 分)

2019-03-17  本文已影响0人  smatrcHendsa

https://pintia.cn/problem-sets/15/problems/859
从一个点出发 遍历所有的点回到起点 并且把图中的每一条路走过且仅仅走过一遍
1 用DFS扫一遍 能遍历所有的点
2 每个点的总边数为偶数
欧拉回路

#include <cstdio>
#include <algorithm>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;

const int SIZE = 1000;
int map[SIZE][SIZE];
bool vis[SIZE];
int cnt[SIZE];
int N, M, ans = 0, start = 0;

void dfs(int s) {
    vis[s] = 1;
    for (int i = 0; i < N; i++) {
        if (map[s][i] <= 0 || vis[i]) continue;
        dfs(i);
    }
}

int main() {
    cin >> N >> M;
    
    fill(map[0], map[0] + N * N, 0);
    fill(cnt, cnt + N, 0);
    fill(vis, vis + N, 0);
    for (int i = 0; i < M; i++) {
        int a, b;
        scanf("%d %d", &a, &b);
        a--; b--;
        map[a][b] = map[b][a] = 1;
        cnt[a]++; cnt[b]++;
    }

    dfs(0);
    for (int i = 0; i < N; i++) {
        if (cnt[i] % 2 || !vis[i]) {
            printf("0\n");
            return 0;
        }
    }

    printf("%d\n", 1);
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读