Pagini recente » Cod sursa (job #1614767) | Cod sursa (job #46148) | Cod sursa (job #584916) | Cod sursa (job #1435919) | Cod sursa (job #2815834)
#include<fstream>
#include<vector>
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int noduri;
int muchii;
vector<int> okey;
vector<int> adiacenta[100000];
vector<int> pozitii[100000];
vector<int> ciclu_euler;
void citire_Euler()
{
in >> noduri >> muchii;
for (int i = 1; i <= muchii; i++)
{
int x, y;
in >> x >> y;
adiacenta[x].push_back(y);
adiacenta[y].push_back(x);
pozitii[x].push_back(i);
pozitii[y].push_back(i);
}
}
void dfs_Euler(int x, vector<int> &vizite, vector<int> &ciclu_euler)
{
while (!adiacenta[x].empty())
{
int vecin = adiacenta[x].back();
int pozitie = pozitii[x].back();
adiacenta[x].pop_back();
pozitii[x].pop_back();
if (vizite[pozitie] == 0)
{
vizite[pozitie]++;
dfs_Euler(vecin, vizite, ciclu_euler);
}
}
ciclu_euler.push_back(x);
}
void afisare_Euler()
{
vector<int> vizite(muchii + 1, 0);
for (int i = 1; i <= noduri; i++)
if (adiacenta[i].size() % 2 != 0)
{
out << "-1\n";
return;
}
dfs_Euler(1, vizite, ciclu_euler);
for (int i = 1; i < ciclu_euler.size(); i++)
out << ciclu_euler[i] << " ";
}
int main()
{
citire_Euler();
afisare_Euler();
return 0;
}