Pagini recente » Cod sursa (job #2891253) | Cod sursa (job #813348) | Cod sursa (job #559800) | Cod sursa (job #2362008) | Cod sursa (job #1620703)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#define pb push_back
using namespace std;
ifstream in("ciclueuler.in");
ofstream out("ciclueuler.out");
int n,aux;
vector < vector < int > > v;
vector < int > grad;
vector < int >::iterator it;
void citire()
{
int m,x,y;
in>>n>>m;
v.resize(n+1);
grad.resize(n+1);
for(int i=1; i<=m; i++)
{
in>>x>>y;
v[x].pb(y);
v[y].pb(x);
grad[x]++;
grad[y]++;
}
}
bool eGrafEulerian()
{
for(int i=1; i<=n; i++)
if(grad[i]%2)
return false;
return true;
}
void cicluEulerian(int x)
{
while(v[x].size())
{
aux=v[x].back();
v[x].pop_back();
for(it=v[aux].begin(); it!=v[aux].end(); it++)
if(*it==x)
{
*it=v[aux].back();
v[aux].pop_back();
break;
}
cicluEulerian(aux);
}
out<<x<<' ';
}
void ciclueEulerian2()
{
stack < int > stiva;
int aux;
vector < int > :: iterator it;
stiva.push(1);
while(!stiva.empty())
{
if(!v[stiva.top()].empty())
{
aux = v[stiva.top()].back();
v[stiva.top()].pop_back();
for(it=v[aux].begin(); *it!=stiva.top(); it++);
*it = v[aux].back();
v[aux].pop_back();
stiva.push(aux);
}
else
{
if(stiva.size() != 1)
out<<stiva.top()<<' ';
stiva.pop();
}
}
}
int main()
{
citire();
if(eGrafEulerian())
//cicluEulerian(1);
ciclueEulerian2();
else
out<<"-1";
return 0;
}