Pagini recente » Cod sursa (job #1712215) | Cod sursa (job #2302336) | Cod sursa (job #1905210) | Cod sursa (job #2984140) | Cod sursa (job #308816)
Cod sursa(job #308816)
#include<fstream>
#define N 100005
#define M 500005
using namespace std;
int nr=0,n,m,x,y,d[N],c[M],stvf[M],stvec[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 k=1;
stvf[k]=x;
stvec[k]=0;
while (k)
{
x=stvf[k];
if(stvec[k]<a[x][0])
{
y=a[x][++stvec[k]];
if(y==0)
continue;
a[x][stvec[k]]=0;
if(x!=y)
a[y][poz[x][stvec[k]]]=0;
stvf[++k]=y;
stvec[k]=0;
continue;
}
c[++nr]=x;
k--;
}
}
inline 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;
return 0;
}