Pagini recente » Cod sursa (job #1986563) | Cod sursa (job #1674100) | Cod sursa (job #1615780) | Cod sursa (job #2810633) | Cod sursa (job #493980)
Cod sursa(job #493980)
#include<cstdio>
#include<vector>
#define f first
#define s second
const int maxn = 100005;
const int maxm = 500005;
using namespace std;
vector <pair <int , int > > G[maxn];
int i , j , n , m , a , b , e , dg[maxn] , sol[maxm];
bool seen[maxn] ;
int tip[maxm];
void DFS(int node)
{
int i;
seen[node] = 1;
for( i = 0 ; i < G[node].size() ; ++i) {
if ( seen[G[node][i].f] ) {
if( tip[G[node][i].s] == 0)
tip[G[node][i].s] = 1;
}
else {
tip[G[node][i].s] = 2 ;
DFS( G[node][i].f );
}
}
}
void sterge_muchie ( int nod , int ind ) {
int i , nod2 = G[nod][ind].f , m = G[nod][ind].s;
G[nod].erase(G[nod].begin() + ind);
for ( i = 0 ; i < G[nod2].size() ;++i)
if ( G[nod2][i].s == m ) {
G[nod2].erase( G[nod2].begin() + i);
return;
}
}
void Euler()
{
int i , v = 1;
for( i = 1 ; i <= n ; ++i )
if ( dg[i] & 1 ) {
printf("-1\n");
return;
}
while ( e < m ) {
bool ok = 0;
for( i = 0 ; i < G[v].size() ; ++i ) {
if ( tip[G[v][i].s] == 1 ) {
ok = true;
int aux = G[v][i].f;
sterge_muchie(v , i);
v = aux;
break;
}
}
if ( !ok && !G[v].empty() ) {
int aux = G[v][0].f;
sterge_muchie(v, 0);
v = aux;
}
++e;
printf("%d ",v);
}
}
int main()
{
freopen("ciclueuler.in","r",stdin);
freopen("ciclueuler.out","w",stdout);
scanf("%d %d",&n,&m);
for( i = 1 ; i <= m ; ++i ){
scanf("%d %d",&a,&b);
G[a].push_back(make_pair( b , i ));
G[b].push_back(make_pair( a, i ));
dg[a] ++ , dg[b] ++;
}
DFS(1);
//for( i = 1 ; i <= m ; ++i )
// printf("%d\n",tip[i]);
Euler();
return 0;
}