Pagini recente » Cod sursa (job #768501) | Cod sursa (job #3033389) | Cod sursa (job #2293519) | Cod sursa (job #592792) | Cod sursa (job #2538260)
#include <fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
vector <int> lista[100001];
int st[500001],n,k=1,vc[100001];
void citeste()
{
int n1,n2,m,i;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>n1>>n2;
lista[n1].push_back(n2);
lista[n2].push_back(n1);
vc[n1]++;
vc[n2]++;
}
}
int viz[100001],rez[500001];
int nr=0,varf;
void euler(int nod)
{
int fiu;
viz[nod]=1;
while(lista[nod].size())
{
k++;
st[k]=fiu=lista[nod].back();
lista[nod].pop_back();///sterg ultimul vecin al nodului nod
vector <int>::iterator it2;
it2=find(lista[st[k]].begin(), lista[st[k]].end(),nod); ///sterg nod din lista fiu
lista[st[k]].erase(it2);
nod=fiu;
}
}
int main()
{
int i,ok=0;
citeste();
for(i=1;i<=n;i++)
if(vc[i]%2!=0)
ok=1;
if(ok==0)
{
st[1]=1;
while(k>0)
{
int varf=st[k];
euler(varf);
while(k>0 && lista[st[k]].empty())
{
nr++;
rez[nr]=st[k];
k--;
}
}
for(i=1;i<=nr;i++)
cout<<rez[i]<<" ";
}
else
cout<<"-1";
return 0;
}