Pagini recente » Cod sursa (job #2360889) | Cod sursa (job #2880142) | Cod sursa (job #195458) | Cod sursa (job #498264) | Cod sursa (job #2164339)
#include <iostream>
#include <fstream>
#define Nmax 1001
using namespace std;
ifstream fin ("eul.in");
ofstream fout ("eul.out");
int n,m,a[Nmax][Nmax],d[Nmax];
int c3[Nmax],nr;
void ciclu (int k,int c[1001],int &u) //u nr de elem ale ciclului , c e ciclul, k e primul nod
{
int h,i;
h=k;
u=1;
c[u]=h;
do
{
for (i=1;i<=n;i++)
if (a[i][h]==1)
break;
u++;
c[u]=i;
d[i]--;
d[h]--;
a[i][h]=0;
a[h][i]=0;
h=i;
}while (h!=k);
}
void concatenare (int c[100],int &dc, int k, int c1[100],int u)
{
int x[1001],dx,i;
dx=0;
for (i=1;i<=k;i++)
{
dx++;
x[dx]=c[i];
}
for (i=2;i<=u;i++)
{
dx++;
x[dx]=c1[i];
}
for (i=k+1;i<=dc;i++)
{
dx++;
x[dx]=c[i];
}
for (i=1;i<=dx;i++)
c[i]=x[i];
dc=dx;
}
void construire (int c[1001],int &dc)
{
int k,i,c1[1001],u;
ciclu(1,c,dc);
do
{
k=0;
for (i=1;i<=dc;i++)
if (d[c[i]]>0)
{
k=i;
break;
}
if (k>0)
{
ciclu(c[k],c1,u);
concatenare(c,dc,k,c1,u);
}
}while (k>0);
}
int main()
{
int i,j,h;
fin>>n>>m;
for (h=1;h<=m;h++)
{
fin>>i>>j;
a[i][j]=1;
a[j][i]=1;
d[i]++;
d[j]++;
}
construire(c3,nr);
for (i=1;i<=nr;i++)
cout<<c3[i]<<" ";
fin.close();
fout.close();
return 0;
}