Pagini recente » Cod sursa (job #1085763) | Cod sursa (job #2236188) | Cod sursa (job #1146591) | Cod sursa (job #1024923) | Cod sursa (job #1146120)
#include<iostream>
#include <fstream>
#include <list>
#include <stack>
#define pb push_back
using namespace std;
list<int> V[100000];
stack<int> S;
list<int> L;
bool grad[100000];
int n, m, x, y;
ofstream g("ciclueuler.out");
void read(){
ifstream f("ciclueuler.in");
f>>n>>m;
for(int i=0; i<m; i++)
{
f>>x>>y;
V[x].push_back(y);
if(x!=y)
V[y].push_back(x);
grad[x]=!grad[x];
grad[y]=!grad[y];
}
}
void er_muchie(int a, int b){
V[a].pop_front();
if(a==b)return;
for(list<int>::iterator it=V[b].begin(); it!=V[b].end(); it++)
if(*it==a)
{
V[b].erase(it);
return;
}
}
void euler1(int nod){
int x0=nod;
while(true){
if(!V[nod].size())
return;
x0=V[nod].front();
er_muchie(nod, x0);
S.push(nod);
nod=x0;
}
}
int v;
void rez(){
v=1;
do{
euler1(v);
v=S.top(); S.pop();
g<<v<<" ";
}while(!S.empty());
}
int main(){
read();
for(int i=1;i<=n;i++)
if(grad[i]){
g<<-1;
g<<-1;
return 0;
}
rez();
return 0;
}