Pagini recente » Cod sursa (job #1025184) | Monitorul de evaluare | Cod sursa (job #1528519) | Cod sursa (job #992221) | Cod sursa (job #1822106)
#include <fstream>
using namespace std;
ifstream fin("ciclueuler.in");
ofstream fout("ciclueuler.out");
int n,m,a[100][100],d[100],c[100],dc;
void ciclu(int k,int c[100],int &u)
{
int i,h;
h=k;
u=1;
c[u]=h;
do
{
for(i=1;i<=n;i++)
if(a[h][i]==1)
break;
u++;
c[u]=i;
a[h][i]=0;
a[i][h]=0;
d[h]--;
d[i]--;
h=i;
}while(h!=k);
}
void concatenare(int c[100],int &dc,int k,int c1[100],int u)
{
int x[100],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[100],int &dc)
{
int k,i,c1[100],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()
{
fin>>n>>m;
int i,x1,x2;
for(i=1;i<=m;i++)
{
fin>>x1>>x2;
a[x1][x2]=1;
a[x2][x1]=1;
d[x1]++;d[x2]++;
}
fin.close();
construire(c,dc);
for(i=1;i<=dc;i++)
fout<<c[i]<<" ";
return 0;
}