Pagini recente » Cod sursa (job #3004094) | Cod sursa (job #624284) | Cod sursa (job #2504046) | Cod sursa (job #2624458) | Cod sursa (job #1815911)
#include <stdio.h>
#include <vector>
using namespace std;
FILE *fin = fopen("ciclueuler.in", "r");
FILE *fout = fopen("ciclueuler.out", "w");
vector <int> muchie[100001];
vector <int> raspuns;
int from[500001];
int to[500001];
int grad[100001];
char vizitat[500001];
vector <int> stiva;
int ok;
int n, m,x,y,nod,muc;
int main()
{
fscanf(fin, "%d%d", &n, &m);
for(int i=1; i<=m; i++)
{
fscanf(fin , "%d%d", &x ,&y);
muchie[x].push_back(i);
muchie[y].push_back(i);
from[i]=x;
to[i]=y;
grad[x]++;
grad[y]++;
}
int ok=1;
for(int i=1; i<=n;i++)
{
if(grad[i]%2==1) ok=0;
}
if(ok==0) fprintf(fout, "-1");
else
{
stiva.push_back(1);
while(!stiva.empty())
{
nod = stiva.back();
if(!muchie[nod].empty())
{
muc = muchie[nod].back();
muchie[nod].pop_back();
if(vizitat[muc]==0)
{
vizitat[muc]=1;
if(nod == from[muc]) stiva.push_back(to[muc]);
else stiva.push_back(from[muc]);
}
}
else
{
raspuns.push_back(nod);
stiva.pop_back();
}
}
for(int i=0; i<raspuns.size()-1; i++) fprintf(fout, "%d ", raspuns[i]);
}
return 0;
}