Pagini recente » Cod sursa (job #1665083) | Cod sursa (job #1866479) | Cod sursa (job #278832) | Cod sursa (job #1061453) | Cod sursa (job #1199786)
#include <fstream>
#include <cstring>
using namespace std;
ifstream cin("ciclueuler.in");
ofstream cout("ciclueuler.out");
typedef struct celula {
long nod;
celula* next;
}*lista;
void add(long nod, lista &p)
{
lista r=new celula;
r->nod=nod;
r->next=p;
p=r;
}
void dfs(long nod,long viz[],lista lda[])
{
viz[nod]=1;
lista r=lda[nod];
while (r) {
if (viz[r->nod]==0) dfs(r->nod,viz,lda);
r=r->next;
}
}
void euler(long nod,lista lda[])
{
lista r,v;
long key;
while (lda[nod]){
cout<<nod<<" ";
key=lda[nod]->nod;
lda[nod]=lda[nod]->next;
v=lda[key];
r=v;
if (lda[key]->nod==nod) {
lda[key]=lda[key]->next;
delete v;
}
else
while (v) {
if (v->nod==nod){
r->next=v->next;
delete v;
break;
}
r=v;
v=v->next;
}
euler(key,lda);
}
}
long n,i,j,valid,m,a,b;
long viz[100013],RG[100013];
lista lda[100013];
int main()
{
memset(lda,0,sizeof(lda));
memset(viz,0,sizeof(viz));
cin>>n>>m;
for (i=1;i<=m;++i) {
cin>>a>>b;
add(a,lda[b]);
add(b,lda[a]);
++RG[a];
++RG[b];
}
valid=1;
for (i=1;i<=n;++i)
if (RG[i]%2!=0){ cout<<"-1 \n";
valid=0;
break;
}
if (valid==1){
dfs(1,viz,lda);
for (i=1;i<=n;++i)
if (viz[i]==0) { cout<<"-1 \n";
valid=0;
break;
}
}
if (valid==1) euler(1,lda);
return 0;
}