Pagini recente » Cod sursa (job #1387830) | Cod sursa (job #2964426) | Cod sursa (job #937952) | Cod sursa (job #10774) | Cod sursa (job #2543294)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 100005;
const int MMAX = 500005;
int N, M;
vector < pair <int, int> > graph[NMAX];
bool usedEdge[MMAX];
int deg[NMAX];
vector <int> answer;
void dfs(int node)
{
while (!graph[node].empty())
{
int nextNode = graph[node].back().first;
int indEdge = graph[node].back().second;
graph[node].pop_back();
if (usedEdge[indEdge] == false)
{
usedEdge[indEdge] = true;
dfs(nextNode);
}
}
answer.push_back(node);
}
int main()
{
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
fin >> N >> M;
for (int i = 1;i <= M;++i)
{
int u, v;
fin >> u >> v;
graph[u].push_back(make_pair(v, i));
graph[v].push_back(make_pair(u, i));
++deg[u];
++deg[v];
}
for (int i = 1;i <= N;++i)
if (deg[i] % 2)
{
fout << "-1\n";
return 0;
}
dfs(1);
answer.pop_back();
for (auto& i : answer)
fout << i << " ";
fin.close();
fout.close();
return 0;
}