1126 Eulerian Path (25 分)

注意图不一定连通!。

const int N=510;
bool g[N][N];
int d[N];
bool vis[N];
int n,m;
int cnt;

void dfs(int u)
{
    vis[u]=true;
    cnt++;

    for(int i=1;i<=n;i++)
        if(g[u][i] && !vis[i])
            dfs(i);
}

int main()
{
    cin>>n>>m;

    while(m--)
    {
        int a,b;
        cin>>a>>b;
        g[a][b]=g[b][a]=true;
        d[a]++,d[b]++;
    }

    int odd=0;
    for(int i=1;i<=n;i++)
    {
        if(d[i] & 1) odd++;
        if(i>1) cout<<' '<<d[i];
        else cout<<d[i];
    }
    cout<<endl;

    dfs(1);
    if(odd == 0 && cnt == n) puts("Eulerian");
    else if(odd == 2 && cnt == n) puts("Semi-Eulerian");
    else puts("Non-Eulerian");

    //system("pause");
    return 0;
}
posted @ 2021-03-06 15:08  Dazzling!  阅读(27)  评论(0编辑  收藏  举报