Pagini recente » Cod sursa (job #1919259) | Cod sursa (job #2392004) | Cod sursa (job #663249) | Cod sursa (job #1809130) | Cod sursa (job #1815753)
#include <iostream>
#include <cstdio>
#include <vector>
#include <stack>
using namespace std;
struct muchii
{
int nod1,nod2;
bool used=1;
}v[500005];
vector <int> lv[500005],c;
stack <int> s;
FILE *f=fopen("ciclueuler.in","r");
int n,m,grad[500005];
void citire( )
{
fscanf(f,"%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int x,y;
fscanf(f,"%d%d",&x,&y);
++grad[x];
++grad[y];
lv[x].push_back(i);
lv[y].push_back(i);
v[i].nod1=x;
v[i].nod2=y;
}
}
int verif_grad( )
{
for(int i=1;i<=n;i++)
if(grad[i]%2!=0)
return 0;
return 1;
}
void rez( )
{
s.push(1);
while(!s.empty( ))
{
int nod=s.top();
if(lv[nod].size())
{
int i=lv[nod].back();
lv[nod].pop_back();
if(v[i].used==1)
{
if(v[i].nod1 != nod)
s.push(v[i].nod1);
else
s.push(v[i].nod2);
v[i].used=0;
}
}
else
{
c.push_back(nod);
s.pop();
}
}
}
int main()
{
citire( );
FILE *f1=fopen("ciclueuler.out","w");
if(verif_grad()==0)
fprintf(f1,"-1");
else
{rez( );
vector <int> :: iterator ii;
c.pop_back();
for(ii=c.begin();ii!=c.end();ii++)
fprintf(f1,"%d ",*ii);
}
return 0;
}