Pagini recente » Cod sursa (job #1102387) | Cod sursa (job #1306500) | Cod sursa (job #1584372) | Cod sursa (job #1611531) | Cod sursa (job #2443072)
#include<fstream>
#include<vector>
using namespace std;
#define maxn 100005
#define maxm 500005
int n,m,g[maxn],stiva[maxm],rez[maxm] , prim=1, ultim=1,k=1;
vector <int>v[maxn];
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
void read(){
int x,y;
for(int i=1; i<=m; i++){
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
g[x]++; g[y]++;
}
}
void euler(){
while(prim<=ultim&&prim>0){
while(g[stiva[prim]]){
stiva[++ultim]=v[stiva[prim]][g[stiva[prim]]-1];
v[stiva[prim]].pop_back();
g[stiva[prim]]--;
for(int i=0; i<g[stiva[ultim]]; i++){
if(v[stiva[ultim]][i]==stiva[prim]){
v[stiva[ultim]].erase (v[stiva[ultim]].begin()+i);
g[stiva[ultim]]--;
break;
}
}
prim++;
}
rez[k++]=stiva[prim];
prim--;
ultim--;
}
}
int main(){
cin>>n>>m;
read();
for(int i=1; i<=n; i++)
if(g[i]&1){
cout<<-1<<'\n';
return 0;
}
stiva[1]=1;
euler();
k-=2;
for(int i=1; i<=k; i++)
cout<<rez[i]<<' ';
return 0;
}
/*
#include <iostream>
#include <cstring>
#include <vector>
//std::ifstream cin("ciclueuler.in");
//std::ofstream cout("ciclueuler.out");
using namespace std;
#define maxn 500505
vector<int> G[maxn];
bool used_edge[maxn];
int from[maxn],to[maxn], N,M;
void citire(){
int x,y;
cin>>N>>M;
for(int i=1;i<=M;i++){
cin>>x>>y;
G[x].push_back(i);
G[y].push_back(i);
from[i]=x;
to[i]=y;
}
}
int main()
{
int node;
citire();
for(int i=1;i<=N;i++)
if(G[i].size()&1){
cout<<"-1\n";
return 0;
}
vector<int> ans,stk;
stk.push_back(1);
while(!stk.empty()){
node=stk.back();
if(!G[node].empty()){
int e=G[node].back();
G[node].pop_back();
if(!used_edge[e]){// ::reprezinta in cazul de fata from si to , cele declarate global.
used_edge[e]=true;//^operator pe biti xor, pe scurt stk.push_back(to[e]);
int to=from[e] ^ ::to[e] ^ node;//pt ca node==from[e];
stk.push_back(to);
}
}else{
stk.pop_back();
ans.push_back(node);
}
}
for(vector<int>::iterator it=ans.begin();it!=ans.end()-1;it++)
cout<<*it<<' ';
return 0;
}
*/