常德跑和子和牌算法
昨晚写了一个跑和子的和牌算法.还没有来得写注释.
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;
}

浙公网安备 33010602011771号