Pagini recente » Cod sursa (job #2406926) | Cod sursa (job #524115) | Cod sursa (job #1972315) | Cod sursa (job #471232) | Cod sursa (job #2562120)
#include <iostream>
#include <cstdio>
#include <fstream>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
const int N = 100001;
const int M = 500001;
struct muchie{
int x, y;
bool sters;
};
muchie vm[M];
int nc, nr;
int edg[2*M], urm[2*M], lst[N];
int deg[N];
int ciclu[M];
void dfs(int node){
muchie e;
int next;
for(int p=lst[node]; p!=0; p=urm[p]){
e = vm[edg[p]];
if(e.sters == true)
continue;
next = e.x + e.y - node;
vm[edg[p]].sters = true;
lst[node] = urm[p];
dfs(next);
}
ciclu[nc++] = node;
}
int main()
{
int n,m,i,start;
bool eulerian;
fin >> n >> m;
for(i=0; i<m; i++){
fin >> vm[i].x >> vm[i].y;
start = vm[i].x;
deg[vm[i].x]++, deg[vm[i].y]++;
edg[++nr] = i;
urm[nr] = lst[vm[i].x];
lst[vm[i].x] = nr;
edg[++nr] = i;
urm[nr] = lst[vm[i].y];
lst[vm[i].y] = nr;
}
eulerian = true;
for(i=1; i<=n; i++)
if(deg[i]%2 == 1)
eulerian = false;
if(!eulerian)
fout << "-1\n";
else{
dfs(start);
for(i=0; i<nc-1; i++)
fout << ciclu[i] << " ";
}
return 0;
}