Pagini recente » Cod sursa (job #2274109) | Cod sursa (job #1638607) | Cod sursa (job #2823357) | Cod sursa (job #2967106) | Cod sursa (job #2458533)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int NMAX = 100001;
const int MMAX = 500001;
vector <int> G[NMAX];
vector <int> ciclu;
vector <int> stiva;
bool used[MMAX];
int A[MMAX], B[MMAX];
int main()
{
FILE *fin, *fout;
int nod,i,n,m,a,b,edge,next;
fin = fopen("ciclueuler.in","r");
fout = fopen("ciclueuler.out","w");
fscanf(fin,"%d %d",&n,&m);
for(i=0;i<m;i++){
fscanf(fin,"%d %d",&a,&b);
G[a].push_back(i);
G[b].push_back(i);
A[i]=a;
B[i]=b;
}
for(i=1;i<=n;i++)
if(G[i].size()%2 == 1){
fprintf(fout,"-1\n");
return 0;
}
stiva.push_back(1);
while(!stiva.empty()){
nod = stiva.back();
if(!G[nod].empty()){
edge = G[nod].back();
G[nod].pop_back();
if(!used[edge]){
used[edge] = true;
next = A[edge];
if(next == nod)
next = B[edge];
stiva.push_back(next);
}
}
else{
stiva.pop_back();
ciclu.push_back(nod);
}
}
for(i=0;i<ciclu.size()-1;i++)
fprintf(fout,"%d ",ciclu[i]);
fclose(fin);
fclose(fout);
return 0;
}