Pagini recente » Cod sursa (job #2025489) | Rating Marcu Ionut (Marcu314) | Cod sursa (job #2577740) | Cod sursa (job #1239481) | Cod sursa (job #2750040)
// Euler.cpp : This file contains the 'main' function. Program execution begins and ends there.
//
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
const int MAX_N = 1e5 + 1;
const int MAX_M = 5 * 1e5 + 1;
ifstream fin{ "ciclueuler.in" };
ofstream fout{ "ciclueuler.out" };
int N{ 0 }, M{ 0 };
vector<vector<pair<int, int>>> adj(MAX_N);
vector<bool> seen(MAX_M, false);
vector<int> cycle;
void dfs_euler(int u)
{
while (adj[u].size())
{
int v = adj[u].back().first;
int e = adj[u].back().second;
adj[u].pop_back();
if (seen[e] == false)
{
seen[e] = true;
dfs_euler(v);
}
}
cycle.push_back(u);
}
int cnt{ 0 };
vector<bool> visited(MAX_N, false);
void dfs(int u)
{
visited[u] = true;
for (pair<int, int> p : adj[u])
{
if (visited[p.first] == false)
{
dfs(p.first);
}
}
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= M; ++i)
{
int u, v;
fin >> u >> v;
adj[u].push_back({ v, i });
adj[v].push_back({ u, i });
}
for (int u = 1; u <= N; ++u)
{
if (adj[u].size() % 2 != 0)
{
fout << -1 << endl;
return 0;
}
}
for (int u = 1; u <= N; ++u)
{
if (visited[u] == false && adj[u].size() != 0)
{
dfs(u);
cnt++;
}
}
if (cnt > 1)
{
fout << -1 << endl;
return 0;
}
dfs_euler(1);
cycle.pop_back();
for (int u : cycle)
{
fout << u << " ";
}
fout << endl;
}