Pagini recente » Cod sursa (job #852674) | Cod sursa (job #398950) | Cod sursa (job #1430617) | Cod sursa (job #2842114) | Cod sursa (job #2572391)
#include <fstream>
#include <vector>
#define N 100001
using namespace std;
ifstream f ( "ciclueuler.in" );
ofstream g ( "ciclueuler.out" );
vector < pair < int, int > > graph[N];
int start[N], cicle[N], euler[N], n, m, x, y, k, p, i, gr[N], nr;
bool viz[N];
int main()
{ f >> n >> m;
for ( i = 1; i <= m; i++ ){
f >> x >> y;
graph[x].push_back ( { y, i } );
graph[y].push_back ( { x, i } );
gr[x]++, gr[y]++;
}
cicle[k = 1] = 1;
for ( i = 1; i <= n; i++ )
if ( gr[i] % 2 == 1 )
nr++;
if ( nr > 2 ){
g << -1;
return 0;
}
while ( k != 0 ){
if ( gr[cicle[k]] == 0 ){
euler[++p] = cicle[k];
k--;
}
int node = cicle[k];
for ( start[node]; start[node] < graph[node].size ( ); start[node]++ ){
int new_node = graph[node][start[node]].first;
int arc_num = graph[node][start[node]].second;
if ( viz[arc_num] == 0 ){
cicle[++k] = new_node;
viz[arc_num] = 1;
gr[node]--, gr[new_node]--;
start[node]++;
break;
}
}
}
if ( p == m + 1 )
for ( i = 1; i <= p; i++ )
g << euler[i] << ' ';
else
g << -1;
return 0;
}