Pagini recente » Cod sursa (job #1594972) | Cod sursa (job #1129874) | Cod sursa (job #2904240) | Cod sursa (job #806674) | Cod sursa (job #1234220)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream ka("ciclueuler.in");
ofstream ki("ciclueuler.out");
const int N_MAX = 100000;
const int M_MAX = 500000;
struct muchie
{
int index;
int nr_ordine;
};
vector< vector <muchie> >muchii(N_MAX + 1);
bool folosita[M_MAX + 1], vazut[N_MAX + 1];
int grad[N_MAX + 1];
stack <muchie> stiva;
vector <int> raspuns;
int n, m;
int main()
{
ka >> n >> m;
int x, y;
for(int i = 1; i <= m; i++)
{
ka >> x >> y;
muchie mm;
mm.index = y;
mm.nr_ordine = i;
muchii[x].push_back(mm);
mm.index = x;
muchii[y].push_back(mm);
grad[x]++;
grad[y]++;
}
muchie mm;
mm.index = x;
mm.nr_ordine = 0;
stiva.push(mm);
while(!stiva.empty())
{
int curent = stiva.top().index;
int f = stiva.top().nr_ordine;
int c = curent;
vazut[c] = true;
stiva.pop();
for(int i = f; i < muchii[curent].size(); i++)
{
if(!folosita[muchii[curent][i].nr_ordine])
{
folosita[muchii[curent][i].nr_ordine] = true;
muchie mm;
mm.index = curent;
mm.nr_ordine = i + 1;
stiva.push(mm);
curent = muchii[curent][i].index;
mm.index = curent;
mm.nr_ordine = 0;
stiva.push(mm);
break;
}
}
raspuns.push_back(c);
}
bool euler = true;
for(int i = 1; i <= n && euler; i++)
{
if(!vazut[i] || grad[i]%2 != 0)
euler = false;
}
if(euler)
for(int i = 0; i < raspuns.size() - 1; i++)
ki << raspuns[i] << " ";
else
ki << -1;
}