Cod sursa(job #253412)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 5 februarie 2009 19:21:32
Problema Dusman Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
# include <stdio.h>
# include <stdlib.h>
int b[1005][1005],i,j,n,m,k,p,a[1005],x,y,c[1005],d[1005],q[1005];
int valid (int i)
{
int j;
for (j=1;j<i;j++)
if (a[i]==a[j])
return 0;
return 1;
}
int sol (int i)
{
int j;
if (i!=8)
return 0;
for (j=0;j<n;j++)
if (b[q[a[j]]][q[a[j+1]]]==1)
return 0;
return 1;
}


void back (int i)
{
int val;
for (val=1;val<=8;val++)
{
a[i]=val;
if (valid (i))
if (sol (i))
{
p++;
if (p==k)
{
for (j=1;j<=8;j++)
printf ("%i ",q[a[j]]);
exit (EXIT_SUCCESS);


}


}
else
back (i+1);
}
}




int main ()
{
freopen ("dusman.in","r",stdin);
freopen ("dusman.out","w",stdout);
scanf ("%i%i%i",&n,&k,&m);
for (i=0;i<m;i++)
{
scanf ("%i%i",&x,&y);
b[x][y]=1;
b[y][x]=1;
}
for (i=1;i<=n;i++)
c[i]=i;
d[1]=1;
c[1]=0;
j=2;
for (i=2;i<=n;i++)
{
if (c[i]!=0)
if (b[d[j-1]][i]==0)
{
d[j]=i;
j++;
c[i]=0;
if (i>4)
i=i-4;
else
i=1;
if (j==n-7)
i=n;
}
}
for (i=1;i<j;i++)
printf ("%i ",d[i]);
j=1;
for (i=1;i<=n;i++)
if (c[i]!=0)
{
q[j]=i;
j++;
}

back (1);

return 0;
}