Pagini recente » Cod sursa (job #1600579) | Cod sursa (job #1752239) | Cod sursa (job #823889) | Cod sursa (job #334896) | Cod sursa (job #2558559)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
vector < pair <int, int> > L[100001],M;
stack <int> S;
int Viz[500001],V[100001];
int n, m;
void Citire()
{ int i,u,v;
f>>n>>m;
for(i=0;i<=m-1;i++)
{ f>>u>>v;
L[u].push_back(make_pair(v,i));
L[v].push_back(make_pair(u,i));
M.push_back(make_pair(u,v));
}
}
void DFS(int nod)
{ V[nod]=1;
int j;
for(j=0;j<L[nod].size();j++)
{ int vec=L[nod][j].first;
if(V[vec]==0)
DFS(vec);
}
}
int Verificare()
{int i,ok1=1,ok2=1;
for(i=1;i<=n;i++)
{if(V[i]==0)
ok1=0;
if(L[i].size()%2==1)
ok2=0;}
if(ok1==1&&ok2==1)
return 1;
else return 0;
}
vector <int> Sol;
void Ciclu_Eulerian()
{ int vecin;
S.push(1);
while(!S.empty())
{ int nod=S.top();
if(!L[nod].empty())
{ int poz=L[nod].back().second;
L[nod].pop_back();
if(Viz[poz]==0)
{ Viz[poz]=1;
if(M[poz].first==nod)
vecin=M[poz].second;
else vecin=M[poz].first;
S.push(vecin);
}
}
else { S.pop();
Sol.push_back(nod);
}
}
}
void Afisare()
{ int i;
for(i=0;i<Sol.size()-1;i++)
g<<Sol[i]<<" ";
}
int main()
{
Citire();
DFS(1);
if(Verificare()==0)
g<<-1;
else
{Ciclu_Eulerian();
Afisare();}
f.close();
g.close();
return 0;
}