Pagini recente » Cod sursa (job #3226984) | Cod sursa (job #2052237) | Cod sursa (job #2550987) | Cod sursa (job #129021) | Cod sursa (job #584485)
Cod sursa(job #584485)
#include<stdio.h>
#include<stdlib.h>
#define dim 100005
using namespace std;
int v[5*dim],viz[dim],NR,nr,*M[dim],*A[dim],n,m,i,x,y;
FILE *f=fopen("ciclueuler.in","r"), *g=fopen("ciclueuler.out","w");
void afisare()
{
for(i=1;i<=nr;i++)
fprintf(g,"%d ",v[i]);
fprintf(g,"\n");
fclose(f);
fclose(g);
}
void euler(int x)
{
int ok,i;
for(i=1;i<=A[x][0];i++)
{
if(A[x][i]==1) {afisare(); exit(0);}
if(!M[x][i])
{
M[x][i]=1;
v[++nr]=A[x][i];
if(viz[A[x][i]] == 0)
{NR++;
viz[A[x][i]] = 1;
ok=1;
}
euler(A[x][i]);
v[nr--]=0;
M[x][i]=0;
if(ok)
{NR--;
viz[A[x][i]] = 0; }
}
}
//if(NR==n-1) {afisare(); exit(0);}
}
int main()
{
fscanf(f,"%d %d",&n,&m);
for(i=1;i<=n;i++)
{
A[i]=(int *) realloc(A[i],sizeof(int));
A[i][0]=0;
M[i]=(int *) realloc(M[i],sizeof(int));
M[i][0]=0;
}
for(i=1;i<=m;i++)
{
fscanf(f,"%d %d",&x,&y);
A[x][0]++;
A[x]=(int*) realloc(A[x],(A[x][0]+1) * sizeof(int));
A[x][A[x][0]]=y;
M[x][0]++;
M[x]=(int*) realloc(M[x],(M[x][0]+1) * sizeof(int));
M[x][M[x][0]]=0;
}
euler(1);
if(NR==n-1) {afisare(); exit(0);}
fprintf(g,"-1\n");
fclose(f);
fclose(g);
}