Pagini recente » Cod sursa (job #2729242) | Cod sursa (job #2614140) | Cod sursa (job #332577) | Cod sursa (job #873810) | Cod sursa (job #2818846)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
class Graf
{
private:
int N, M;
vector<vector<pair<int, int>>> adj;
vector<int> circuit;
vector<bool> viz;
void Euler();
public:
Graf(int, int);
void adaugaMuchie(int, int, int);
void Afiseaza();
};
Graf ::Graf(int n, int m)
{
N = n;
M = m;
adj.resize(n + 1);
viz.resize(m + 1);
}
void Graf::adaugaMuchie(int x, int y, int i)
{
adj[x].push_back(make_pair(y, i));
adj[y].push_back(make_pair(x, i));
}
void Graf::Euler()
{
int i, curr;
stack<int> stk;
for (i = 0; i < N; ++i)
if (adj[i].size() & 1)
{
fout << -1;
return;
}
stk.push(1);
while (!stk.empty())
{
curr = stk.top();
if (adj[curr].size())
{
pair<int, int> e = adj[curr].back();
adj[curr].pop_back();
if (!viz[e.second])
{
viz[e.second] = true;
stk.push(e.first);
}
}
else
{
stk.pop();
circuit.push_back(curr);
}
}
}
void Graf::Afiseaza()
{
Euler();
for (auto i : circuit)
fout << i << " ";
}
int main()
{
int n, m, i, x, y;
fin >> n >> m;
Graf G(n, m);
for (i = 0; i < m; ++i)
{
fin >> x >> y;
G.adaugaMuchie(x, y, i);
}
G.Afiseaza();
return 0;
}