Pagini recente » Cod sursa (job #1999561) | Cod sursa (job #2850567) | Cod sursa (job #1582628) | Cod sursa (job #3244159) | Cod sursa (job #2352220)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define nmax 100005
#define mmax 500005
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int n,m, viz[mmax], sol[mmax],l;
vector <pair <int, int> > v[nmax];
stack <int> S;
void citire()
{
int i,x,y;
f>>n>>m;
for(i=1; i<=m; i++)
{
f>>x>>y;
v[x].push_back({y,i});
v[y].push_back({x,i});
}
}
void euler()
{
int nod, next, poz;
while(!S.empty())
{
nod=S.top();
if(!v[nod].empty())
{
next=v[nod].back().first;
poz=v[nod].back().second;
v[nod].pop_back();
if(viz[poz]==0)
{
viz[poz]=1;
S.push(next);
}
}
else
{
S.pop();
sol[++l]=nod;
}
}
}
int main()
{
citire();
int ok=1,i;
S.push(1);
euler();
if(l-1!=m)
ok=0;
for(i=1; i<=n; i++)
if(v[i].size()%2!=0)
ok=0;
if(ok)
{
for(i=1; i<l; i++)
g<<sol[i]<<' ';
}
else
g<<-1;
f.close();
g.close();
return 0;
}