Pagini recente » Cod sursa (job #578693) | Cod sursa (job #988391) | Cod sursa (job #1623103) | Cod sursa (job #628334) | Cod sursa (job #1028970)
#include <stdio.h>
#define NMAX 1500
FILE *F = fopen("ciclueuler.in", "r");
FILE *G = fopen("ciclueuler.out","w");
int st[NMAX],nr_n,a[100][100],grad[NMAX],viz[NMAX];
void afiseaza(int k)
{
for(int i=1;i<k;i++)
if(i<k-1) fprintf(G,"%d ", st[i]);
else fprintf(G,"%d", st[i]);
}
bool solutie(int k)
{
for(int i=1;i<=nr_n;i++)
for(int j=1;j<nr_n;j++) if(a[i][j]!=0) return false;
return true;
}
bool ev(int k)
{
if(viz[st[k]]>grad[st[k]])return false;
return true;
}
void back(int k)
{
int x;
for(x=1;x<=nr_n;x++)
{
if(a[st[k-1]][x]==1)
{
st[k]=x;
viz[x]++;
a[st[k-1]][x]=0;
a[x][st[k-1]]=0;
if(ev(k))
{
if(solutie(k)) afiseaza(k);
else back(k+1);
}
else
{
a[st[k-1]][x]=1;
a[x][st[k-1]]=1;
viz[x]--;
}
}
}
}
int main()
{
int nr_m,i,x,y,par=0;
fscanf(F,"%d %d", &nr_n,&nr_m);
for(i=0;i<nr_m;i++)
{
fscanf(F,"%d %d", &x, &y);
a[x][y]=a[y][x]=1;
grad[x]++; grad[y]++;
}
for(i=0;i<nr_n;i++)
if(grad[i]%2!=0) {par=i; break;}
if(par!=0) fprintf(G,"-1");//{st[1]=par;viz[par]=1; back(2);}
else {st[1]=1; viz[par]=1; back(2);}
return 0;
}