Pagini recente » Cod sursa (job #3236721) | Cod sursa (job #2728611) | Cod sursa (job #1825565) | Cod sursa (job #104500) | Cod sursa (job #2927931)
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <queue>
#include <stack>
#define MAXN 100005
using namespace std;
FILE *fin,*fout;
struct XY{
int x,y;
};
vector <int> g[MAXN];
stack <int> q;
int ne[MAXN];
void AddEdge(XY a){
g[a.x].push_back(a.y);
g[a.y].push_back(a.x);
ne[a.x]++;
ne[a.y]++;
}
void Euler(int x){
int neigh,c,c2;
q.push(x);
c2=ne[x]/2;
while(!q.empty()){
x=q.top();
if(ne[x]!=0){
neigh=g[x].front();
q.push(neigh);
g[x].erase(g[x].begin());
c=0;
for(int y : g[neigh]){
if(y==x){
g[neigh].erase(g[neigh].begin()+c);
break;
}
c++;
}
ne[x]--;
ne[neigh]--;
}else{
if(x==1){
if(c2>0){
fprintf(fout,"%d ",x);
c2--;
}
}else{
fprintf(fout,"%d ",x);
}
q.pop();
}
}
}
int main(){
int n,m,s,i;
XY a;
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.x,&a.y);
AddEdge(a);
}
s=1;
for(i=0;i<n;i++){
if(ne[i]%2==1){
s=0;
}
}
if(s==0){
fprintf(fout,"-1\n");
}else{
Euler(1);
}
fclose(fin);
fclose(fout);
return 0;
}