Pagini recente » Cod sursa (job #2430673) | Cod sursa (job #249166) | Cod sursa (job #249181) | Cod sursa (job #1368565) | Cod sursa (job #2477431)
#include <fstream>
#include <vector>
#include <cstring>
#define DIM 100000 + 1
using namespace std;
ifstream f ("ciclueuler.in");
ofstream g ("ciclueuler.out");
vector < pair < int, int > > graph[DIM];
int gr[DIM], cicle[5 * DIM], euler[5 * DIM], start[DIM];
bool viz[5 * DIM];
void modif ( int node, int new_node, int number_arc ){
gr[node]--, gr[new_node]--, viz[number_arc] = 1;
}
int main()
{ int n, m, x, y;
f >> n >> m;
for ( int i = 1; i <= m; i++ ){
f >> x >> y;
gr[x]++;
gr[y]++;
graph[x].push_back ( {y, i} );
graph[y].push_back ( {x, i} );
}
for ( int i = 1; i <= n; i++ )
if ( gr[i] % 2 != 0 ){
g << -1;
return 0;
}
cicle[1] = 1;
int k = 1, p = 0;
while ( k != 0 ){
int node = cicle[k];
if ( gr[node] == 0 ){
euler[ ++p ] = cicle[k];
k--;
}
for ( start[node]; start[node] < graph[node].size(); start[node]++ ){
int i = start[node];
int new_node = graph[node][i].first;
int number_arc = graph[node][i].second;
if ( viz[number_arc] == 0 ){
modif( node, new_node, number_arc );
start[node]++;
cicle[ ++k ] = new_node;
break;
}
}
}
p--;
if ( p != m ){
g << -1;
return 0;
}
for ( int i = 1; i <= p; i++ )
g << euler[i] << ' ';
return 0;
}