Pagini recente » Cod sursa (job #2133013) | Cod sursa (job #1306770) | Cod sursa (job #3143749) | Cod sursa (job #1369346) | Cod sursa (job #2225106)
#include <bits/stdc++.h>
#define lim 100001
using namespace std;
ifstream fin ("ciclueuler.in");
ofstream fout ("ciclueuler.out");
int n, m;
int f[lim*5];
vector <int> solution;
vector <pair<int, int>> graph[lim];
void checkForEulerianCycle( int node )
{
int current_Node, current_Edge;
while ( graph[node].size() )
{
current_Node = graph[node].back().first;
current_Edge = graph[node].back().second;
graph[node].pop_back();
if ( f[current_Edge] == 0 )
{
f[current_Edge] = 1;
checkForEulerianCycle(current_Node);
}
}
solution.push_back(node);
}
int main()
{
fin>>n>>m;
for ( int i = 1; i <= m; ++i )
{
int first_Node, second_Node;
fin>>first_Node>>second_Node;
graph[first_Node].push_back({second_Node, i});
graph[second_Node].push_back({first_Node, i});
}
for ( int i = 1; i <= n; ++i )
{
if ( graph[i].size()%2 || graph[i].size() == 0 )
{
fout<<-1<<'\n';
return 0;
}
}
checkForEulerianCycle(1);
for ( int i = 0; i < solution.size(); ++i )
fout<<solution[i]<<" ";
}