Pagini recente » Cod sursa (job #2144836) | Cod sursa (job #2135289) | Cod sursa (job #3002776) | Cod sursa (job #2832180) | Cod sursa (job #1112861)
#include<fstream>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
ifstream f("ciclueuler.in");
ofstream g("ciclueuler.out");
int a[10002][10002],d[100002],v[100002],w[100002];
int n,m,p,q,S;
void citire()
{
f>>n>>m; S=2*m;
int i,x,y;
for(i=1;i<=m;i++)
{
f>>x>>y;
a[x][y]++; d[x]++;
a[y][x]++; d[y]++;
}
}
int next(int x)
{
int i;
for(i=1;i<=n;i++)
if(a[i][x]==1)
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]=0;
y=next(w[k]);
}
q=k;
}
void inserare(int poz)
{
int i,j;
for(i=p;i>=poz+1;i--)
v[i+1]=v[i];
for(i=1,j=poz;i<=q;i++,j++)
v[j]=w[i];
p=p+q-1;
}
void euler()
{
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();
euler();
int i;
for(i=1;i<=p;i++)
g<<v[i]<<" ";
f.close(); g.close();
return 0;
}