仔细读题然后只需要你判断是否连通,各节点度数是什么情况。然后输出就行了。
#include<bits/stdc++.h>
using namespace std;
vector<int> v, ans;
vector<vector<int>> G;
int cnt = 0;
bool vis[510];
void dfs(int root) {
vis[root] = true;
cnt++;
for (int i = 0; i < G[root].size(); i++) {
if (vis[G[root][i]] == false) dfs(G[root][i]);
}
}
int main() {
int n, m, a, b, cntOdd = 0;
scanf ("%d %d", &n, &m);
v.resize(n + 1);
G.resize(n + 1);
for (int i = 0; i < m; i++) {
scanf ("%d %d", &a, &b);
G[a].push_back(b);
G[b].push_back(a);
v[a]++;
v[b]++;
}
for (auto it : v) {
ans.push_back(it);
if (it % 2 == 1) cntOdd++;
}
for (int i = 1; i < ans.size(); i++) {
if (i != 1) cout << ' ';
printf ("%d", ans[i]);
}
dfs(1);
if (cntOdd == 0 && cnt == n) printf ("Eulerian");
else if (cntOdd == 2 && cnt == n) printf ("Semi-Eulerian");
else printf ("Non-Eulerian");
}