Pagini recente » Cod sursa (job #2815485) | Cod sursa (job #1784018) | Cod sursa (job #3135896) | Cod sursa (job #1674848) | Cod sursa (job #1679759)
#include<cstdio>
#include<vector>
#include<stack>
using namespace std;
vector< pair< int ,int > >L[500100];
stack<int>S;
int n,m,i,j,a,b,c,p,ok,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 ] )
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[a] ++;
x[b] ++;
}
for(i=1;i<=n;i++){
if( x[i] ){
dfs(i);
p = i;
break;
}
}
for(i=1;i<=n;i++){
if( x[i] % 2 || !v[i] ){
fprintf(g,"-1");
return 0;
}
}
for(i=1;i<=n;i++){
v[i] = 0;
}
S.push(p);
while( !S.empty() ){
a = S.top();
if( x[a] == 0 ){
S.pop();
if( ok )
fprintf(g,"%d ",a);
ok = 1;
}
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;
S.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;
}