欧拉路径求解

骑马修栅栏

https://ac.nowcoder.com/acm/problem/22948

#include <bits/stdc++.h>
using namespace std;

const int N=505;
int n=500, m;
int g[N][N];
vector<int> ans;
int deg[N];

void dfs(int u){
    for(int i=1; i<=n; ++i){
        if(g[u][i]){
            g[u][i]--;
            g[i][u]--;
            dfs(i);
        }
    }
    ans.push_back(u);
}

int main(){
    memset(g, 0x00, sizeof g);
    memset(deg, 0x00, sizeof deg);
    cin>>m;
    for(int i=0; i<m; ++i){
        int a, b; // 读入无向图
        cin>>a>>b;
        g[a][b]++;
        g[b][a]++;
        deg[a]++;
        deg[b]++;
    }

    // 从小到大开始找Euler Path
    int k=1;
    while(!deg[k]) ++k;
    for(int i=k; i<=n; ++i){ // 确定起点
        if(deg[i]&0x01) {k=i; break;}
    }
    dfs(k);

    for(int i=ans.size()-1; i>=0; --i) cout<<ans[i]<<endl;
    return 0;
}
全部评论

相关推荐

11-13 14:37
门头沟学院 Java
点赞 评论 收藏
分享
10-31 13:04
南华大学 Java
嵌入式的小白:很多面试,面试前不会去打扰cto的,但一般cto不会在这些小事上刷人,只能说这个cto比较操心,啥重要不重要,紧急不紧急的,估计都会过问,平淡看待吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务