1 条题解
-
0
思路
必须用完每条无向边一次且输出字典序最小路,重边分别计数,从最小奇点或最小有边点开始。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; int g[501][501],deg[501];vector<int>path;void dfs(int v){for(int u=1;u<=500;u++)while(g[v][u]){g[v][u]--;g[u][v]--;dfs(u);}path.push_back(v);}int main(){int f;cin>>f;while(f--){int a,b;cin>>a>>b;g[a][b]++;g[b][a]++;deg[a]++;deg[b]++;}int start=1;while(!deg[start])start++;for(int i=1;i<=500;i++)if(deg[i]%2){start=i;break;}dfs(start);reverse(path.begin(),path.end());for(int v:path)cout<<v<<'\n';}
- 1