Pagini recente » Cod sursa (job #106072) | Cod sursa (job #1959897) | Cod sursa (job #2003727) | Cod sursa (job #1524130) | Cod sursa (job #1819239)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ofstream out("ciclueuler.out");
ifstream in("Ciclueuler.in");
const int MAX_N = 100000;
vector<int> Neighbour[MAX_N + 1];
int degree[MAX_N + 1];
void Euler(int x)
{
out << x << " ";
for(int y : Neighbour[x])
{
if(degree[y] >= 2)
{
auto it1 = find(Neighbour[x].begin(), Neighbour[x].end(), y);
if(it1 != Neighbour[x].end())
Neighbour[x].erase(it1);
auto it2 = find(Neighbour[y].begin(), Neighbour[y].end(), x);
if(it2 != Neighbour[y].end())
Neighbour[y].erase(it2);
degree[x] --;
degree[y] --;
Euler(y);
}
}
}
int main()
{
int N, M, i, a, b;
in >> N >> M;
/* read */
for(i = 1; i <= M; i++)
{
in >> a >> b;
Neighbour[a].push_back(b);
Neighbour[b].push_back(a);
degree[a] ++;
degree[b] ++;
}
/* test for existance of cycle */
for(i = 1; i <= N; i++)
if(degree[i] %2 != 0)
{
out << -1;
return 0;
}
Euler(1);
return 0;
}