Pagini recente » Cod sursa (job #2097277) | Cod sursa (job #2989788) | Cod sursa (job #1869841) | Cod sursa (job #1041283) | Cod sursa (job #2553046)
#include <iostream>
#include <fstream>
#include <cstdio>
#include <vector>
#define MMAX 500005
#define NMAX 100005
using namespace std;
struct vecini{
int nod;
int muchie;
};
int f[MMAX];
vector <vecini> v[NMAX];
int st[MMAX];
int raspuns[MMAX];
int main()
{
FILE *fin=fopen("ciclueuler.in","r");
ofstream fout("ciclueuler.out");
int i,N,M,x,y,k,nr_elem=0,ok,varf;
vecini a;
fscanf(fin,"%d%d",&N,&M);
for(i=1;i<=M;i++){
fscanf(fin,"%d%d",&x,&y);
a.nod=y;
a.muchie=i;
v[x].push_back(a);
a.nod=x;
v[y].push_back(a);
}
for(i=1;i<=N;i++){
if(v[i].size()%2==1){
fout<<"-1";
return 0;
}
}
/*for(i=1;i<=N;i++){
for(vector <vecini> :: iterator it=v[i].begin();it!=v[i].end();it++){
a=*it;
fout<<a.nod<<" ";
}
fout<<"\n";
}*/
k=1;
st[k]=1;
while(k>0){
varf=st[k];
ok=0;
for(vector <vecini>:: iterator it=v[varf].begin();it!=v[varf].end() && ok==0;it++){
a=*it;
if(f[a.muchie]==0){
f[a.muchie]=1;
k++;
st[k]=a.nod;
ok=1;
}
}
if(ok==0){
nr_elem++;
raspuns[nr_elem]=st[k];
k--;
}
}
if(nr_elem>M+1){
fout<<"-1";
return 0;
}
for(i=2;i<=nr_elem;i++){
fout<<raspuns[i]<<" ";
}
return 0;
}