Pagini recente » Cod sursa (job #372984) | Cod sursa (job #2951787) | Cod sursa (job #2449770) | Cod sursa (job #488476) | Cod sursa (job #2928232)
#include <stdio.h>
#include <vector>
#include <stack>
#define NMAXX 100000
#define MMAXX 500000
using namespace std;
struct Edge {
int x, y;
bool visited;
};
stack<int> cycle;
stack<int> finalCycle;
vector<int> graph[NMAXX];
Edge edges[MMAXX];
int main() {
FILE *fin, *fout;
int n, m, x, y, i, node, neighbour;
fin = fopen( "ciclueuler.in", "r" );
fout = fopen( "ciclueuler.out", "w" );
fscanf( fin, "%d%d", &n, &m );
for ( i = 0; i < m; i++ ) {
fscanf( fin, "%d%d", &x, &y );
edges[i] = {x - 1, y - 1};
graph[x - 1].push_back( y - 1 );
graph[y - 1].push_back( x - 1 );
}
node = 0;
while ( node < n && graph[node].size() % 2 == 0 )
node++;
if ( node == n ) {
cycle.push( 0 );
while ( cycle.size() ) {
node = cycle.top();
if ( graph[node].size() ) {
neighbour = graph[node].back();
graph[node].pop_back();
if ( edges[neighbour].visited == 0 ) {
cycle.push( neighbour );
edges[neighbour].visited = 1;
}
} else {
finalCycle.push( node );
cycle.pop();
}
}
while ( finalCycle.size() != 0 ) {
fprintf( fout, "%d ", finalCycle.top() + 1 );
finalCycle.pop();
}
} else
fprintf( fout, "-1" );
fclose( fin );
fclose( fout );
return 0;
}