1126 Eulerian Path (25 分)

1126 Eulerian Path (25 分)

解題思想

AC代碼

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n, m, cnt = 0;
vector<vector<int> > edge;
vector<bool> visit;
void dfs(int v){
    cnt++;
    visit[v] = true;
    for (int i = 0; i < int(edge[v].size()); i++)
        if (visit[edge[v][i]] == false) dfs(edge[v][i]);
}
int main(){
    scanf("%d%d", &n, &m);
    edge.resize(n+1);
    visit.resize(n+1);
    int a, b;
    for (int i = 0; i < m; i++){
        scanf("%d%d", &a, &b);
        edge[a].push_back(b);
        edge[b].push_back(a);
    }
    int even = 0;
    for (int i = 1; i <= n; i++){
        if (i != 1) printf(" ");
        printf("%d", int(edge[i].size()));
        if (edge[i].size()%2 == 0) even++;
    }
    printf("\n");
    dfs(1);
    if (even == n && cnt == n) printf("Eulerian\n");
    else if (even == n-2 && cnt == n) printf("Semi-Eulerian\n");
    else printf("Non-Eulerian\n");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章