Pagini recente » Cod sursa (job #1952246) | Cod sursa (job #231575) | Cod sursa (job #2709081) | Cod sursa (job #2835495) | Cod sursa (job #1529648)
#include<fstream>
#include<string.h>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
struct lista{int nod,ord;
lista *leg;} *G[100007];
int n,m,i,Sol[500007],lim=0,V[500007],C[100007],STCK[500007],top=0;
void adaug(int i,int j,int o)
{
lista *p;
p=new lista;
p->nod=j;
p->leg=G[i];
p->ord=o;
G[i]=p;
}
void citire()
{
int i,j;
f>>n>>m;
for(int l=1;l<=m;++l)
{
f>>i>>j;
C[i]++; C[j]++;
adaug(i,j,l);
adaug(j,i,l);
}
}
void Euler(int nod)
{
STCK[++top]=nod;
while(top!=0)
{
lista *p=G[STCK[top]];
int ok=1;
for(p=G[STCK[top]];p&&ok;p=p->leg)
if(!V[p->ord])
{
V[p->ord]=1;
ok=0;
STCK[++top]=p->nod;
}
if(ok) Sol[++Sol[0]]=STCK[top],top--;
}
}
int EulerCheck()
{
for(int i=1;i<=n;++i) if(C[i]%2) return 1;
return 0;
}
int main()
{
citire();
memset(C,0,sizeof C);
if(EulerCheck())
{
g<<"-1"<<'\n';
return 0;
}
memset(V,0,sizeof V);
Euler(1);
for(i=1;i<Sol[0];++i) g<<Sol[i]<<" ";
g<<'\n';
return 0;
}