Pagini recente » Cod sursa (job #779488) | Cod sursa (job #2288435)
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<vector>
#include<list>
#include <fstream>
#include <iostream>
using namespace std;
#define MAXN 100000
#define MAXM 500000
int M,N;
bool ciclu;
list<int> L[MAXN];
int D[MAXN];
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
stack<int> S;
vector<int> C;
void ciclueulerian(){
S.push(0);
int nod,vecin;
list<int>::iterator it;
bool go=false;
while(!S.empty()){
nod=S.top();
go=false;
while(!L[nod].empty()){
vecin=L[nod].front();
L[nod].pop_front();
for (it=L[vecin].begin(); it!=L[vecin].end(); it++){
if(*it==nod){
L[vecin].erase(it);
break;
}
}
S.push(vecin);
go=true;
break;
}
if(go)
continue;
C.push_back(nod);
S.pop();
}
if(C.size()<M)
ciclu=false;
}
int main(){
fin >> N >> M;
int x,y;
for(int i=0;i<M;i++){
fin >> x >> y;
L[x-1].push_back(y-1);
if(x!=y){
L[y-1].push_back(x-1);
D[x-1]++;
D[y-1]++;
}
}
ciclu=true;
for(int i=0;i<N;i++){
if(D[i]%2==1){
ciclu=false;
break;
}
}
if(ciclu)
ciclueulerian();
if(!ciclu)
fout << -1 << endl;
else{
for(int i=0;i<M;i++)
fout << C[i]+1 << " ";
}
fin.close();
fout.close();
return 0;
}