题目链接
注意点:1.注意判断的前提是连通图,忘记判断的话有20分。
#include<cstdio>
int G[510][510];
int degree[510];
bool vis[510];
int n, v;
int cnt = 0;
void DFS(int a) {
vis[a] = true;
cnt++;
for (int i = 1; i <= n; i++) {
if (vis[i] == false && G[a][i] == 1) {
DFS(i);
}
}
}
int main() {
scanf("%d%d", &n, &v);
for (int i = 0; i < v; i++) {
int a, b;
scanf("%d%d", &a, &b);
G[a][b] = 1;
G[b][a] = 1;
degree[a]++;
degree[b]++;
}
DFS(1);
int odd = 0;
for (int i = 1; i <= n; i++) {
printf("%d", degree[i]);
if (i < n)
printf(" ");
if (degree[i] % 2 == 1) {
odd++;
}
}
printf("\n");
if (odd == 2 && cnt == n) {
printf("Semi-Eulerian");
}
else if (odd == 0 && cnt == n) {
printf("Eulerian");
}
else {
printf("Non-Eulerian");
}
return 0;
}