Pagini recente » Cod sursa (job #961212) | Cod sursa (job #3126652) | Cod sursa (job #1523049) | Cod sursa (job #488632) | Cod sursa (job #1621881)
#include<cstdio>
#include<vector>
#include<stack>
using namespace std;
vector< pair< int , int > >L[500100];
stack<int>q;
int n,m,a,b,c,i,p,ok,j,v[500100],x[500100];
FILE *f,*g;
void dfs(int nod){
v[nod] = 1;
for(int i = 0; i < L[nod].size() ; i ++){
if( v[ L[nod][i].first ] == 0 )
dfs( L[nod][i].first );
}
}
int main(){
f=fopen("ciclueuler.in","r");
g=fopen("ciclueuler.out","w");
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++){
fscanf(f,"%d%d",&a,&b);
L[a].push_back( make_pair( b , i ) );
L[b].push_back( make_pair( a , i ) );
x[b] ++ ;
x[a] ++ ;
}
for(i=1;i<=n;i++){
if( x[i] ){
dfs(i);
p=i;
break;
}
}
for(i=1;i<=n;i++){
if( v[i] == 0 || x[i] % 2 == 1 ){
fprintf(g,"-1");
return 0;
}
v[i] = 0;
}
q.push(p);
ok = 1;
while( !q.empty() ){
a = q.top();
if( x[a] == 0 ){
q.pop();
if( !ok )
fprintf(g,"%d ",a);
ok = 0;
}
else{
while( v[ L[a][ L[a].size() - 1 ].second ] == 1 ){
L[a].erase( L[a].end() - 1 );
}
v[ L[a][ L[a].size() - 1 ].second ] = 1;
q.push( L[a][ L[a].size() - 1 ].first );
x[a] --;
x[ L[a][ L[a].size() - 1 ].first ] --;
L[a].erase( L[a].end() - 1 );
}
}
fclose(f);
fclose(g);
return 0;
}