Pagini recente » Cod sursa (job #665629) | Cod sursa (job #311464) | Cod sursa (job #1135192) | Cod sursa (job #1325573) | Cod sursa (job #1112857)
#include<fstream>
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
ifstream f("euler.in");
ofstream g("euler.out");
int d[100005],v[100005],w[100005],n,m,a[10005][10005],p,q,S;
void citire()
{
int i,x,y;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>x>>y;
a[x][y]++;
a[y][x]++;
d[x]++;
d[y]++;
S=S+2;
}
}
int next(int x)
{
int i;
for(i=1;i<=n;i++)
{
if(a[i][x]>0) return i;
}
}
void ciclu(int x)
{
int K=0,i,y,z;
w[++K]=x;
y=next(x);
while(y!=x)
{
z=w[K];
w[++K]=y;
d[y]--;
d[z]--;
a[y][z]--;
a[z][y]--;
S=S-2;
y=next(w[K]);
}
q=K;
}
void inserare(int poz)
{
int i,j;
for(i=p;i>=poz+1;i--) v[i+q]=v[i];
for(i=1,j=poz;i<=q;i++,j++) v[j]=w[i];
p=p+q-1;
}
void eulerian()
{
int i,poz,vf;
ciclu(1);
memcpy(v,w,(q+1)*sizeof(int));
p=q;
while(S!=0)
{
for(i=1;i<=p;i++)
if(d[v[i]]!=0)
{
poz=i;
vf=v[i];
break;
}
ciclu(vf);
inserare(poz);
}
}
int main()
{
citire();
eulerian();
int i;
for(i=1;i<=p;i++) g<<v[i]<<" ";
return 0;
}