Pagini recente » Cod sursa (job #2442014) | Cod sursa (job #33901) | Cod sursa (job #2596065) | Cod sursa (job #136152) | Cod sursa (job #1687443)
#include<cstdio>
#include<vector>
#include<algorithm>
#define DIM 100005
FILE *f=fopen("ciclueuler.in","r"), *g=fopen("ciclueuler.out","w");
using namespace std;
vector <int> v[DIM];
int N, M, Eulerian = 1, SOL[DIM], lSOL = 0, Q[5*DIM], hST, ST[5*DIM];
bool viz[DIM];
void Citire(){
int i, x, y, NOD, NODnou, p, u;
fscanf(f,"%d %d\n",&N,&M);
for(i=1;i<=M;i++){
fscanf(f,"%d %d\n",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}
for(i=1;i<=N;i++)
if( ( v[i].size() ) % 2 == 1 ){
Eulerian = 0;
return;
}
p = u = 1;
Q[1] = 1;
viz[1] = 1;
while( p <= u ){
NOD = Q[p];
for(i=0;i<v[NOD].size();i++){
NODnou = v[NOD][i];
if( viz[ NODnou ] == 0 ){
Q[++u] = NODnou;
viz[ NODnou ] = 1;
}
}
p ++;
}
for(i=1;i<=N;i++)
if( viz[i] == 0 ){
Eulerian = 0;
return;
}
}
void Rezolvare(){
int i, NOD, NODnou;
hST = 1;
ST[1] = 1;
while( hST > 0 ){
NOD = ST[hST];
if( v[NOD].size() == 0 ){
SOL[++lSOL] = NOD;
hST --;
}
else{
NODnou = v[NOD][ v[NOD].size()-1 ];
ST[++hST] = NODnou;
v[NOD].pop_back();
v[NODnou].erase( find( v[NODnou].begin(), v[NODnou].end(), NOD ) );
}
}
for(i=1;i<=lSOL-1;i++)
fprintf(g,"%d ",SOL[i]);
}
int main(){
Citire();
if( !Eulerian )
fprintf(g,"-1\n");
else
Rezolvare();
return 0;
}