Cod sursa(job #130633)

Utilizator drywaterLazar Vlad drywater Data 1 februarie 2008 16:42:38
Problema Dusman Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
FILE *in,*o;
int p,m,i,j,n,k;
int st[1000],a[1001][4];
int amsol(int p)
{
int i,f=0;
for (i=1;i<p && f==0;i++)
 if (st[i]==st[p])
  f=1;
if (f==1)
 return 1;
else return 0;
}
int valid(int p)
{
int i=1,f=0;
while (a[p][i]!=0 && f==0)
 {
 if (st[p-1]==a[st[p]][i] || st[p+1]==a[st[p]][i])
  f=1;
 i++;
 }
if (f==0)
 return 0;
else return 1;
}
int main()
{
in=fopen("dusman.in","r");
o=fopen("dusman.out","w");
fscanf(in,"%d%d%d",&n,&k,&m);
for(i=1;i<=m;i++)
 {
 fscanf(in,"%d",&j);
 p=1;
 while (a[j][p]!=0)
  p++;
 fscanf(in,"%d",&a[j][p]);
 p=1;
 while (a[a[j][p]][p]!=0)
  p++;
 a[a[j][p]][p]=j;
 }
i=0;
p=1;
st[p]=1;
while (i<=k)
 {
 if (amsol(p)==0 && valid(p)==0 && p<n)
  {
  p++;
  st[p]=1;
  }
 else if (p<=n && st[p]<n)
       {
       st[p]++;
	if (valid(p)==0 && amsol(p)==0 && p==n)
	    i++;
       }
      else {
	   if (valid(p)==0 && amsol(p)==0)
	    i++;
	   p--;
	   while (st[p]==n)
	    p--;
	   st[p]++;
	   }
 }
for (i=1;i<=n;i++)
 fprintf(o,"%d ",st[i]);
fclose(in);
fclose(o);
return 0;
}