古老的智力题

#include
#include
inline bool Judge9(int *ANS,int ans)
{
   bool flag(false);
   switch(ANS[8])
   {
    case 2: if(ans==2||ans==3||ans==5||ans==7) flag=true; break;
    case 3: if(ans==1||ans==2||ans==6) flag=true; break;
    case 4: if(ans==1||ans==4||ans==9) flag=true; break;
    case 5: if(ans==1||ans==8) flag=true; break;
    case 6: if(ans==5||ans==10) flag=true; break;
   }
   if(flag) return true;
   return false;
}
bool Judge1(int*ANS,int n)
{
  for(int i = 0; i < n;++i)
   if( ANS[i] == 3 ) return false;
  return true;
}
bool Judge2(int*ANS,int i)
{
  for(int k = 0; k < 9; ++k)
   if( i!=k && ANS[k]==ANS[k+1]) return false;
  return true;
}
int ANS[10]={0},Q3[5]={1,2,4,7,6},cnt[5];
void DFS(int Current)
{
  if( Current == 11 )
  {
    for(int x = 0; x < 10; ++x) ++cnt[ANS[x]-2];
    if( (Judge1(ANS,ANS[0]-1)&&ANS[ANS[0]-1]==3)
    &&((ANS[ANS[1]-1]==ANS[ANS[1]])&&Judge2(ANS,ANS[1]-1))
    &&(ANS[2]==ANS[Q3[ANS[2]-2]-1])&&((ANS[3]-2)==cnt[0])&&(ANS[12-ANS[4]-1]==ANS[4])
    &&((ANS[5]>5) ? !(cnt[0]==cnt[1]||cnt[0]==cnt[2]||cnt[0]==cnt[3]||cnt[0]==cnt[4]):cnt[0]==cnt[ANS[5]-1])
    &&((6-ANS[6])==abs(ANS[7]-ANS[6]))&&(ANS[7]==(cnt[0]+cnt[4]))
    &&Judge9(ANS,cnt[1]+cnt[2]+cnt[3]))
    {
      for(int i=0;i<10;++i)
        printf("%c%c",ANS[i]-2+'A',i==9?'\n':',');
       return  ;
    }
    for(int x = 0; x < 5; ++x) cnt[x] = 0;
    return   ;
  }
  for(int k = 2; k <= 6; ++k, ANS[Current-1] = 0)
  {
    if( ! ANS[Current-1] ) ANS[Current-1] = k;
    DFS( Current + 1 );
  }
}
int main()
{  // 2 代表 A, 3 代表 B ,  以此类推
    for(int i = 2; i<=6; ++i) { ANS[0] = i; DFS(2); }
    system("pause");
    return 0;
}

DFS

转载于:https://my.oschina.net/jianjungki/blog/615

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值