Pagini recente » Cod sursa (job #1749789) | Cod sursa (job #1048845) | Cod sursa (job #321668) | Monitorul de evaluare | Cod sursa (job #2318881)
#include <cstdio>
#include <deque>
using namespace std;
FILE *f,*g;
int start[100002], t[2][500002], mu[500002],gr[100002];
deque <int> v;
bool fr[500002];
void eulerian(int nod)
{
int poz,vecin;
poz=start[nod];
while(poz)
{
vecin=t[0][poz];
if(fr[mu[poz]]==0)
fr[mu[poz]]=1,eulerian(vecin);
poz=t[1][poz];
}
v.push_back(nod);
}
int main()
{
f=fopen("ciclueuler.in","r");
g=fopen("ciclueuler.out","w");
int m,n,k=0;
int x,y;
fscanf(f,"%d %d",&n,&m);
for(int i=1;i<=m;++i)
{
fscanf(f,"%d %d",&x,&y);
++gr[x],++gr[y];
t[0][++k]=y;
t[1][k]=start[x];
start[x]=k;
mu[k]=i;
t[0][++k]=x;
t[1][k]=start[y];
start[y]=k;
mu[k]=i;
}
for(int i=1;i<=n;++i)
if(gr[i]%2!=0)
{
fprintf(g,"-1");
return 0;
}
eulerian(1);
v.pop_back();
while(!v.empty())
{
int x=v.front();
v.pop_front();
fprintf(g,"%d ",x);
}
fclose(f);
fclose(g);
return 0;
}