Pagini recente » Cod sursa (job #2888296) | Cod sursa (job #3215166) | Cod sursa (job #3281408) | Cod sursa (job #537708) | Cod sursa (job #1412823)
#include<stdio.h>
#include<algorithm>
#include<vector>
#define DIMN 100005
#define DIMM 500005
FILE *f=fopen("ciclueuler.in","r"), *g=fopen("ciclueuler.out","w");
using namespace std;
vector < pair<int,int> > v[DIMN];
int N, M, viz[DIMM], ST[DIMN], HST;
void Citire(){
int i, x, y;
fscanf(f,"%d %d\n",&N,&M);
for(i=1;i<=M;i++){
fscanf(f,"%d %d\n",&x,&y);
v[x].push_back( make_pair(y,i) );
v[y].push_back( make_pair(x,i) );
}
}
bool Componente(){
int viz[DIMN], Q[DIMN], p, u, i, nod;
p = 1; u = 1; Q[1] = 1; viz[1] = 1;
while( p <= u ){
nod = Q[p];
for(i=0;i<v[nod].size();i++)
if( viz[ v[nod][i].first ] == 0 ){
viz[ v[nod][i].first ] = 1;
Q[++u] = v[nod][i].first;
}
p++;
}
if( u == N )
return 1;
else
return 0;
}
bool Paritate(){
for(int i = 1; i <= N; i++ )
if( v[i].size() %2 == 1 )
return 0;
return 1;
}
void Euler(){
int i, nod, nodnou;
HST = 1;
ST[1] = 1;
while( HST >= 1 ){
nod = ST[HST];
while(1){
if( v[nod].size() == 0 )
break;
if( viz[ v[nod][ v[nod].size() - 1 ].second ] == 0 )
break;
v[nod].erase( v[nod].end() - 1 );
}
if( v[nod].size() == 0 ){
fprintf(g,"%d ",nod);
HST --;
}
else{
ST[++HST] = v[nod][ v[nod].size() - 1 ].first;
viz[ v[nod][ v[nod].size() - 1 ].second ] = 1;
}
}
}
int main(){
Citire();
if( Componente() == 0 || Paritate() == 0 )
fprintf(g,"-1\n");
else
Euler();
return 0;
}
// ASTA