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;
}