#include<cstdio>
#include<cstring>
#include<iostream>
#include<iomanip>
#include<queue>
#include<cmath>
#include<stack>
#include<map>
#include<vector>
#include<set>
#include<algorithm>
using namespace std;
typedef long long LL;
const int int_max = 0x07777777;
const int int_min = 0x80000000;
const int maxn = 11000;
const int maxm = 110000;
struct Edge {
int from, to;
Edge(int _from, int _to):from(_from),to(_to){}
};
vector<Edge> es;
vector<int> g[maxn];
void addedge (int from, int to){
es.push_back(Edge(from, to));
g[from].push_back(es.size()-1);
}
int n,m,tot;
int vis[maxm],route[maxm];
void dfs (int x, int pre){
for(int i = 0; i < g[x].size(); i++){
if(!vis[g[x][i]]){
vis[g[x][i]] = 1;
dfs(es[g[x][i]].to,x);
}
}
if(pre!=-1){
route[tot++] = x;
}
}
void solve (){
memset(vis, 0, sizeof(vis));
memset(route, 0, sizeof(route));
tot = 0;
dfs(1, -1);
}
int main(int argc, const char * argv[])
{
while(scanf("%d %d", &n, &m)!=EOF){
es.clear();
for(int i = 0; i < maxn; i++) g[i].clear();
for(int i = 0; i < m; i++){
int x,y;
scanf("%d %d", &x, &y);
addedge(x, y);
addedge(y, x);
}
solve();
cout << 1 << endl;
for(int i = tot-1; i >= 0; i--) cout << route[i] << endl;
}
}
POJ 2230 欧拉回路
最新推荐文章于 2019-06-18 21:43:31 发布