Pagini recente » Cod sursa (job #1830044) | Cod sursa (job #457047) | Statistici Tudor Carare (tudor_carare) | Cod sursa (job #1780544) | Cod sursa (job #308812)
Cod sursa(job #308812)
#include<fstream>
#define N 100010
#define M 500010
using namespace std;
int nr=0,n,m,x,y,d[N],c[M];
int *a[N];
int *poz[N];
ofstream out ("ciclueuler.out");
void citire ()
{
ifstream in1 ("ciclueuler.in");
in1>>n>>m;
while(m--)
{
in1>>x>>y;
d[x]++;
if(x!=y)
d[y]++;
}
in1.close ();
}
void aloc ()
{
for(int i=1;i<=n;i++)
{
a[i]=new int [1+d[i]];
a[i][0]=0;
poz[i]=new int [1+d[i]];
poz[i][0]=0;
}
}
void completez ()
{
int aux;
ifstream in2("ciclueuler.in");
in2>>n>>m;
aux=m;
while (aux--)
{
in2>>x>>y;
a[x][++a[x][0]]=y;
if(x!=y)
{
a[y][++a[y][0]]=x;
poz[x][a[x][0]]=a[y][0];
poz[y][a[y][0]]=a[x][0];
}
}
in2.close ();
}
void euler (int x)
{
int y;
for(int i=1;i<=a[x][0];i++)
{
y=a[x][i];
if(y!=0)
{
a[x][i]=0;
if(y!=x)
a[y][poz[x][i]]=0;
euler (y);
}
}
c[++nr]=x;
}
void scrie ()
{
for(int i=1;i<=nr-1;i++)
out<<c[i]<<" ";
}
int main ()
{
citire ();
aloc();
completez ();
euler(1);
if(m==nr-1 && c[1]==c[nr])
scrie ();
else
out<<-1;
out.close ();
return 0;
}