Pagini recente » Cod sursa (job #2773145) | Cod sursa (job #2863134) | Cod sursa (job #2764177) | Cod sursa (job #1213908) | Cod sursa (job #1252126)
#include <fstream>
#include <stack>
#include <queue>
#include <list>
#define DIM 100000
using namespace std;
stack <int> s;
queue <int> cd;
list <int> nod[DIM];
bool viz[DIM];
int n,m,x,y;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int verif_eul(int x)
{
viz[x]=1;
cd.push(x);
while(!cd.empty())
{
int k=cd.front();
for(list<int>::iterator i=nod[k].begin();i!=nod[k].end();++i)
{
if(!viz[*i])
{
viz[*i]=1;
cd.push(*i);
}
}
cd.pop();
}
for(int i=1;i<=n;++i)
if(viz[i]!=1) return 0; //graficul nu e conex
for(int i=1;i<=n;++i)
if(nod[i].size()%2!=0) return 0; //nodurile nu au grad par
return 1;
}
void stergere(int a,int b)
{
for(list<int>::iterator i=nod[b].begin();i!=nod[b].end();++i)
{
if(*i==a)
{
nod[b].erase(i);
break;
}
}
nod[a].pop_front();
}
void parcurgere(int x)
{
s.push(x);
while(!s.empty())
{
int vf =s.top();
if(nod[vf].empty())
{
g<<vf<<" ";
s.pop();
}
else
{
int pn=nod[vf].front();
stergere(vf,pn);
s.push(pn);
}
}
}
int main()
{
f>>n>>m;
for(int i=1;i<=m ;++i)
{
f>>x>>y;
nod[x].push_back(y);
nod[y].push_back(x);
}
if(!verif_eul(1))
g<<"-1\n";
parcurgere(1);
return 0;
}