常德跑和子和牌算法

昨晚写了一个跑和子的和牌算法.还没有来得写注释.
int Remain(int PAI[HUPAI])
{
 int sum = 0;
 for(int i=1;i<HUPAI;i++)
  sum += PAI[i];
 return sum;
}
//int callstackcount=0;

int LYHPHZHu(int PAI[HUPAI])
{
 int duizipai=0;
 //callstackcount++;
 if( !Remain(PAI) ) return 1;
 for(int i=1;!PAI[i]&&i<HUPAI;i++);
 if ( PAI[i] == 4 )               
 {
  PAI[i] = 0;                  
  if( LYHPHZHu(PAI) ) return 1;       
  PAI[i] = 4;                  
 }
 if ( PAI[i] == 3 )                
 {
  PAI[i] =0;       
  if( LYHPHZHu(PAI) ) return 1;       
  PAI[i] = 3;                 
 }
 if ((PAI[2] && PAI[7] && PAI[10])) {
  PAI[2]--;PAI[7]--;PAI[10]--;
  if( LYHPHZHu(PAI) ) return 1;  
  PAI[2]++;PAI[7]++;PAI[10]++;
 }
 if ((PAI[12] && PAI[17] && PAI[20])) {
  PAI[12]--;
  PAI[17]--;
  PAI[20]--;
  if( LYHPHZHu(PAI) ) return 1; 
  PAI[12]++;
  PAI[17]++;
  PAI[20]++;
 }

 if (i<11) {
  if(PAI[i+10]==2 && PAI[i]>=1)
  {
    PAI[i]--;
    PAI[i+10]-=2;
    if( LYHPHZHu(PAI) ) return 1; 
    PAI[i]++;
    PAI[i+10]+=2;
  }
  if(PAI[i]==2 && PAI[i+10]>=1)
  {
    PAI[i]-=2;
    PAI[i+10]--;
    if( LYHPHZHu(PAI) ) return 1; 
    PAI[i]+=2;
    PAI[i+10]++;   
  }
  if (PAI[i]==2 && PAI[i+10]==2) {
   PAI[i]--;
   PAI[i+10]-=2;
   if( LYHPHZHu(PAI) ) return 1; 
   PAI[i]++;
   PAI[i+10]+=2;
   PAI[i]-=2;

   PAI[i+10]--;
   if( LYHPHZHu(PAI) ) return 1; 
   PAI[i]+=2;
   PAI[i+10]++;
  }
 }
 if (i>10) {
  if(PAI[i]==1 && PAI[i-10]==2)
  {
   PAI[i]--;
   PAI[i-10]-=2;
   if( LYHPHZHu(PAI) ) return 1; 
   PAI[i]++;
   PAI[i-10]+=2;
  }
  if(PAI[i]==2 && PAI[i-10]==1)
  {
   PAI[i]-=2;
   PAI[i+10]--;
   if( LYHPHZHu(PAI) ) return 1; 
   PAI[i]+=2;
   PAI[i-10]++;
  }
  if (PAI[i]==2 && PAI[i-10]==2) {
   PAI[i]--;
   PAI[i-10]-=2;
   if( LYHPHZHu(PAI) ) return 1; 
   PAI[i]++;
   PAI[i-10]+=2;

   PAI[i]-=2;
   PAI[i+10]--;
   if( LYHPHZHu(PAI) ) return 1; 
   PAI[i]+=2;
   PAI[i-10]++;
  }
 }
 if (PAI[i]==2) {
  PAI[i]=0;
  if( LYHPHZHu(PAI) ) return 1;
  PAI[i]=2;
 }
 if( i%10 != 0 && i%10 != 9  &&    PAI[i+1] && PAI[i+2] )     
 {
  PAI[i]--;
  PAI[i+1]--;
  PAI[i+2]--; 
  if( LYHPHZHu(PAI) ) return 1;     
  PAI[i]++;   
  PAI[i+1]++;
  PAI[i+2]++;                

 }
 return 0;
}

posted @ 2005-07-14 13:26  观我生,君子无咎  阅读(688)  评论(0)    收藏  举报