请问德国人住什么房子?(Java实现二:试探法)

public class German {

    boolean isSuccess=false;

    enum country{ England , Sweden , Denmark , NorWay ,German};

    enum color{Red,Yellow,White,Blue,Green};

    enum drink{Tea,Milk,Beer,Caffy};

    enum pet{Dog,Horse,Bird,Cat};

    enum cigarette{Mall,DunHill,Master,Prince,Mix};

    int[][] houseLink=new int[5][5];

   

    boolean resovle1(){

       for (int i=0;i<5;i++)

       {

           if (houseLink[0][i]==-1&&houseLink[1][i]==-1)

           {

              houseLink[0][i]=0;

              houseLink[1][i]=0;

              if (resovle2())

              {         

                  return true;

              }

              else{

                  houseLink[0][i]=-1;

                  houseLink[1][i]=-1;

                  for (int j=0;j<5;j++)

                  {

                     if (houseLink[0][j]==4&&houseLink[4][j]==3)

                     {         

                         houseLink[0][j]=-1;

                         houseLink[4][j]=-1;

                     }

                  }/*当不成立时,还原德国人的值*/

              }

           }

       }

       return false;

    }/*英国人住在红房子里*/

    boolean resovle2(){

       for (int i=0;i<5;i++)

       {

           if (houseLink[0][i]==-1&&houseLink[3][i]==-1)

           {

              houseLink[0][i]=1;

              houseLink[3][i]=0;

              if (resovle3())

              {         

                  return true;

              }

              else{

                  houseLink[0][i]=-1;

                  houseLink[3][i]=-1;

              }

           }

       }

       return false;

    }/*瑞典人养了一条狗*/

    boolean resovle3(){

       for (int i=0;i<5;i++)

       {

           if (houseLink[0][i]==-1&&houseLink[2][i]==-1)

           {

              houseLink[0][i]=2;

              houseLink[2][i]=0;

              if (resovle4())

              {         

                  return true;

              }

              else{

                  houseLink[0][i]=-1;

                  houseLink[2][i]=-1;

              }

           }

       }

       return false;

    }/*丹麦人喝茶*/

    boolean resovle4(){

       for (int i=0;i<4;i++)

       {

           if (houseLink[1][i]==-1&&houseLink[1][i+1]==-1)

           {

              houseLink[1][i]=4;

              houseLink[1][i+1]=2;

              if (resovle5())

              {         

                  return true;

              }

              else{

                  houseLink[1][i]=-1;

                  houseLink[1][i+1]=-1;

              }

           }

       }

       return false;

    }/*绿房子在白房子左边*/

    boolean resovle5(){

       for (int i=0;i<4;i++)

       {/*根据绿房子判断*/

           //boolean isOriginal=false;

           if (houseLink[1][i]==4&&houseLink[2][i]==-1)/*||houseLink[1][i]==-1*/

           {

              houseLink[2][i]=3;

              if (resovle6())

              {         

                  return true;

              }

              else{

                  houseLink[2][i]=-1;

              }

           }

       }

       return false;

    }/*绿房子主人喝咖啡*/

    boolean resovle6(){

       for (int i=0;i<5;i++)

       {

           if (houseLink[4][i]==-1&&houseLink[3][i]==-1)

           {

              houseLink[4][i]=0;

              houseLink[3][i]=2;

              if (resovle7())

              {         

                  return true;

              }

              else{

                  houseLink[4][i]=-1;

                  houseLink[3][i]=-1;

              }

           }

       }

       return false;

    }/*PALL MALL烟的人养了一只鸟*/

    boolean resovle7(){

       for (int i=0;i<5;i++)

       {

           if (houseLink[1][i]==-1&&houseLink[4][i]==-1)

           {

              houseLink[1][i]=1;

              houseLink[4][i]=1;

              if (resovle11())

              {         

                  return true;

              }

              else{

                  houseLink[1][i]=-1;

                  houseLink[4][i]=-1;

              }

           }

       }

       return false;

    }/*黄房子主人抽DUNHILL*/

    void resovle8(){

       houseLink[2][2]=1;

    }

    /*the Third 住在中间房子的人喝牛奶*/

    void resovle9(){

       houseLink[0][0]=3;

    }/*The First confirm 挪威人住在第一间房子*/

    boolean resovle10(){

       for (int i=1;i<5;i++)

       {

           if (houseLink[4][i-1]==-1&&houseLink[3][i]==-1)

           {

              houseLink[4][i-1]=4;

              houseLink[3][i]=3;

              if (resovle13())

              {         

                  return true;

              }

              else{

                  houseLink[4][i-1]=-1;

                  houseLink[3][i]=-1;

              }

           }

       }

       for (int i=0;i<4;i++)

       {

           if (houseLink[4][i+1]==-1&&houseLink[3][i]==-1)

           {

              houseLink[4][i+1]=4;

              houseLink[3][i]=3;

              if (resovle13())

              {         

                  return true;

              }

              else{

                  houseLink[4][i+1]=-1;

                  houseLink[3][i]=-1;

              }

           }

       }

       return false;

    }/*抽混合烟的人住在养猫人的旁边*/

    boolean resovle11(){

       for (int i=1;i<5;i++)

       {

           if (houseLink[3][i-1]==-1&&houseLink[4][i]==1)

           {

              houseLink[3][i-1]=1;

              if (resovle12())

              {         

                  return true;

              }

              else{

                  houseLink[3][i-1]=-1;

              }

           }

       }

       for (int i=0;i<4;i++)

       {

           if (houseLink[3][i+1]==-1&&houseLink[4][i]==1)

           {

              houseLink[3][i+1]=1;

              if (resovle12())

              {         

                  return true;

              }

              else{

                  houseLink[3][i+1]=-1;

              }

           }

       }

       return false;

    }/*养马人住在抽DUNHILL烟的人旁边*/

    boolean resovle12(){

       for (int i=0;i<5;i++)

       {

           if (houseLink[2][i]==-1&&houseLink[4][i]==-1)

           {

              houseLink[2][i]=2;

              houseLink[4][i]=2;

              if (resovle10())

              {         

                  return true;

              }

              else{

                  houseLink[2][i]=-1;

                  houseLink[4][i]=-1;

              }

           }

       }

       return false;

    }/*BLUE MASTER烟的人喝啤酒*/

    boolean resovle13(){

       for (int i=0;i<5;i++)

       {

           if (houseLink[0][i]==-1&&houseLink[4][i]==-1)

           {

              houseLink[0][i]=4;

              houseLink[4][i]=3;

              return true;

           }

       }

       return false;

    }/*德国人抽PRINCE*/

    void resovle14(){

       houseLink[1][1]=3;

    }/*The Second Confirm 挪威人住在蓝房子旁*/

   

    void search(){

       long time=System.currentTimeMillis();

       for(int i=0;i<5;i++){

           for(int j=0;j<5;j++){

              houseLink[j][i]=-1;

           }

       }

       resovle9();

       resovle14();

       resovle8();

       if(resovle1()){

           isSuccess=true;

       }

       time=System.currentTimeMillis()-time;

       if(isSuccess){

           System.out.println("找到正确答案,下面是最终结果:(用时"+time+"毫秒)");

           for (int i=0;i<5;i++)

           {

              for (int j=0;j<5;j++)

              {

                  switch(i){

                     case 0:System.out.print(country.values()[houseLink[i][j]]+"/t");break;

                   case 1:System.out.print(color.values()[houseLink[i][j]]+"/t");break;

                   case 2:System.out.print((houseLink[i][j]>=0?drink.values()[houseLink[i][j]]:"NULL")+"/t");break;

                   case 3:System.out.print((houseLink[i][j]>=0?pet.values()[houseLink[i][j]]:"NULL")+"/t");break;

                   case 4:System.out.print(cigarette.values()[houseLink[i][j]]+"/t");break;

                  }

              }

              System.out.println("");

           }

       }

       else System.out.println("没有找到答案,下面是最终结果:(用时"+time+"毫秒)");;

    }

    /**

     * @param args

     */

    public static void main(String[] args) {

       // TODO Auto-generated method stub

       new German().search();

    }

}

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值