Pagini recente » Monitorul de evaluare | Diferente pentru warm-up-2019/solutii/shoturi intre reviziile 99 si 46 | Monitorul de evaluare | Istoria paginii utilizator/ojiparitateiskillingme | Cod sursa (job #1623740)
#include <fstream>
#include <vector>
#include <stack>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m;
bool eulerian=1;
vector<vector<int> >lista_adiacenta;
vector<int>grad;
vector<bool>viz;
stack<int> stiva;
void citire()
{
int i,nod1,nod2;
fin>>n>>m;
lista_adiacenta.resize(n+2);
grad.resize(n+2);
viz.resize(n+2);
for(i=1;i<=m;i++)
{
fin>>nod1>>nod2;
lista_adiacenta[nod1].push_back(nod2);
grad[nod1]++;
grad[nod2]++;
lista_adiacenta[nod2].push_back(nod1);
}
}
void verificare_grad()
{
int i;
for(i=1;i<=n;i++)
if(grad[i]%2)
{
eulerian=0;
return;
}
}
void euler(int nod_inceput)
{
int nod_curent,aux;
vector<int>::iterator it;
stiva.push(nod_inceput);
while(!stiva.empty())
{
nod_curent=stiva.top();
if(!lista_adiacenta[nod_curent].empty())
{
aux=lista_adiacenta[nod_curent].back();
lista_adiacenta[nod_curent].pop_back();
for(it=lista_adiacenta[aux].begin();*it!=nod_curent;it++);
*it=lista_adiacenta[aux].back();
lista_adiacenta[aux].pop_back();
stiva.push(aux);
}
else
{
if(stiva.size()!=1)
fout<<nod_curent<<' ';
stiva.pop();
}
}
}
void rezolvare()
{
verificare_grad();
if(eulerian==true)
euler(1);
else
fout<<-1;
}
int main()
{
citire();
rezolvare();
return 0;
}