Pagini recente » Cod sursa (job #255077) | Cod sursa (job #944654) | Cod sursa (job #506462) | Cod sursa (job #2260553) | Cod sursa (job #2814196)
#include <bits/stdc++.h>
#define NMax 100001
#define NMax2 500005
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
class graf
{
int nrNoduri, nrMuchii;
bool orientat;
public:
graf(int n, int m, bool o); // constructor
// Ciclu Eulerian
void Ciclu_Eulerian();
void Euler(int s, bool viz[NMax2], int &ct, vector<int>&Sol);
};
int N, M;
vector<pair<int,int>> muchii[NMax];
graf :: graf(int n, int m, bool o)
{
nrNoduri = n;
nrMuchii = m;
orientat = o;
}
void graf :: Euler(int s, bool viz[NMax2], int &ct, vector<int>&Sol)
{
while (!muchii[s].empty())
{
int vecin = muchii[s].back().second; // nod vecin
int muchie = muchii[s].back().first; // index muchie
muchii[s].pop_back();
if(viz[muchie] == 0)
{
viz[muchie] = 1;
Euler(vecin, viz, ct, Sol);
}
}
ct++;
Sol.push_back(s);
}
void graf :: Ciclu_Eulerian()
{
for (int i = 1; i <= nrMuchii; ++i) // citire muchii
{
int x, y;
fin >> x >> y;
muchii[x].push_back({i, y});
muchii[y].push_back({i, x});
}
for (int i = 1; i <= nrNoduri; ++i) // verificam gradul fiecarui nod sa fie par
if (muchii[i].size() % 2)
{
fout << "-1";
return;
}
bool viz[NMax2] = {0};
int ct = 0;
vector<int> Sol;
Euler(1, viz, ct, Sol);
Sol.pop_back();
for (auto i : Sol)
fout << i << " ";
}
int main()
{
fin >> N >> M;
graf G(N, M, 0);
G.Ciclu_Eulerian();
return 0;
}