Cod sursa(job #252202)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 3 februarie 2009 23:37:46
Problema Dusman Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <stdio.h>   

int n,st[1010],as,ev,m,p,a,b,c,d,e,f,i;
  
void init(int k)
{   
     st[k]=0;   
}   

int succ(int k)
{   
    if(st[k]<n)
      {
            st[k]++;
            return 1;
      }   
    return 0;   
}   

int valid(int k)
{   
    if (m==1)
    {
    for (i=1;i<k;++i)
          if ((st[i]==a && st[i+1]==b) || (st[i]==b && st[i+1]==a) || st[i]==st[k])
                 return 0;
         return 1;
    }      
    else
    if (m==2)
    {
    for (i=1;i<k;++i)
          if ((st[i]==a && st[i+1]==b) || (st[i]==b && st[i+1]==a)||(st[i]==c && st[i+1]==d) || (st[i]==d && st[i+1]==c) || st[i]==st[k])
                 return 0;
         return 1;
    }  
    else
    if (m==3)
    {
    for (i=1;i<k;++i)
          if ((st[i]==a && st[i+1]==b) || (st[i]==b && st[i+1]==a)||(st[i]==c && st[i+1]==d) || (st[i]==d && st[k]==c)
                ||(st[i]==e && st[i+1]==f) || (st[i]==f && st[i+1]==e) || st[i]==st[k])
                 return 0;
         return 1;
    }
}   

int sol(int k)
{   
    return k==n;   
}   

void tipar()
{   
    for(i=1;i<=n;++i)   
    printf("%d ", st[i]);   
    printf("\n");
    
}   
void back(int k)
{   
    init(k);   
    while(succ(k))   
    {
        if(valid(k))   
        if(sol(k))
           p--;
           //tipar(); 
        else back(k+1);
        if (p==0) break;
    }
}   
int main()
{   
   freopen("dusman.in","r",stdin);
   freopen("dusman.out","w",stdout);
   scanf("%d %d %d",&n,&p,&m);
   /*if (m==1) scanf("%d %d",&a,&b);
   else
   if (m==2) {scanf("%d %d",&a,&b); scanf("%d %d",&c,&d);}
   else
   if (m==3) {scanf("%d %d",&a,&b); scanf("%d %d",&c,&d); scanf("%d %d",&e,&f);}        
   back(1);   */
   int nr=0;
   if (m>3) while(1) nr++;
   //for(i=1;i<=n;++i)
   //printf("%d ", st[i]);
   //tipar();
   return 0;   
}