第一个问题:帮助男人用船把狼、羊、和一箱菜运送到河对面,船一次只能运一样,而且有苛刻的附加条件:当男人不在时,狼会吃羊,羊也会吃卷心菜。移动鼠标,开始解题吧 


没玩过的最好玩过再看我的代码,不懂的可以问我,写的比较乱。。。
一个有两个类,这个是主要的处理类

  1. import java.util.ArrayList;  
import java.util.ArrayList;
  1. public class Flash {  
  2.       
  3.     static Body sheep;  
  4.   
  5.     static Body dish;  
  6.       
  7.     static Body wolf;  
  8.       
  9.     static Body people;  
  10.       
  11.     static Body tarBody;        //当前运送的东西   
  12.       
  13.     final static ArrayList<Body> tarList = new ArrayList<Body>();  
  14.     final static ArrayList<Body> curList = new ArrayList<Body>();  
  15.       
  16.     /** 
  17.      * @param args 
  18.      */  
  19.     public static void main(String[] args) {  
  20.           
  21.         //初始化羊   
  22.         sheep = new Body(Body.SHEEP);  
  23.           
  24.         sheep.setnAfraidIndex(Body.WOLF);  
  25.         sheep.setnLikeIndex(Body.DISH);  
  26.           
  27.         //初始化菜   
  28.         dish = new Body(Body.DISH);  
  29.           
  30.         dish.setnAfraidIndex(Body.NONE);  
  31.         dish.setnLikeIndex(Body.NONE);  
  32.           
  33.         //初始化狼   
  34.         wolf = new Body(Body.WOLF);  
  35.           
  36.         wolf.setnAfraidIndex(Body.NONE);  
  37.         wolf.setnLikeIndex(Body.SHEEP);  
  38.           
  39.         //初始化特殊的人   
  40.         people = new Body(Body.NONE);  
  41.           
  42.         people.setnAfraidIndex(Body.NONE);  
  43.         people.setnLikeIndex(Body.NONE);  
  44.           
  45.         curList.add(people);  
  46.         curList.add(wolf);  
  47.         curList.add(sheep);  
  48.         curList.add(dish);  
  49.           
  50.         new Thread(){  
  51.             public void run(){  
  52.                 while(tarList.toArray().length < 4){  
  53.                     if(curList.indexOf(people) != -1){  
  54.                         Transportation(tarList,curList,1);  
  55.                     }else{  
  56.                         Transportation(curList,tarList,0);  
  57.                     }  
  58.                 }  
  59.             }  
  60.         }.start();  
  61.     }  
  62.       
  63.     public static void Transportation(ArrayList<Body> tar,ArrayList<Body> cur,int flag){  
  64.           
  65.         //随即取出一个备选的运送的Body   
  66.         boolean bFlag = false;  
  67.         if(!cur.equals(curList)){  
  68.             boolean bFlag2 = false;  
  69.             //比较剩下的Body,是否会出现弱者被吃掉的情况   
  70.             //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。   
  71.             for(Body bb : cur){  
  72.                 if(!bb.equals(people)){  
  73.                     for(Body bbb : cur){  
  74.                         if(!bbb.equals(people) && !bbb.equals(bb)){  
  75.                             if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()  
  76.                                     || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){  
  77.                                 bFlag2 = true;  
  78.                                 break;  
  79.                             }  
  80.                         }  
  81.                     }  
  82.                     if(bFlag2){  
  83.                         break;  
  84.                     }  
  85.                 }  
  86.             }  
  87.               
  88.             if(cur.toArray().length == 2 || bFlag2 == false){  
  89.                 tar.add(people);  
  90.                 cur.remove(people);  
  91.                 if(flag == 1){  
  92.                     System.out.println("向目的地运送:空");  
  93.                 }else{  
  94.                     System.out.println("向目原来地方运送:空");  
  95.                 }  
  96.             }else{  
  97.                 for(Body b : cur){  
  98.                     bFlag = false;  
  99.                     if(!b.equals(people)){  
  100.                         if(tarBody == null){  
  101.                             //比较剩下的Body,是否会出现弱者被吃掉的情况   
  102.                             //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。   
  103.                             for(Body bb : cur){  
  104.                                 if(!bb.equals(b) && !bb.equals(people)){  
  105.                                     for(Body bbb : cur){  
  106.                                         if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){  
  107.                                             if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()  
  108.                                                     || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){  
  109.                                                 bFlag = true;  
  110.                                                 break;  
  111.                                             }  
  112.                                         }  
  113.                                     }  
  114.                                     if(bFlag){  
  115.                                         break;  
  116.                                     }  
  117.                                 }  
  118.                             }  
  119.                         }else if(!tarBody.equals(b)){  
  120.                             //比较剩下的Body,是否会出现弱者被吃掉的情况   
  121.                             //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。   
  122.                             for(Body bb : cur){  
  123.                                 if(!bb.equals(b) && !bb.equals(people)){  
  124.                                     for(Body bbb : cur){  
  125.                                         if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){  
  126.                                             if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()  
  127.                                                     || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){  
  128.                                                 bFlag = true;  
  129.                                                 break;  
  130.                                             }  
  131.                                         }  
  132.                                     }  
  133.                                     if(bFlag){  
  134.                                         break;  
  135.                                     }  
  136.                                 }  
  137.                             }  
  138.                         }  
  139.                           
  140.                         if(!bFlag){  
  141.                             String str = "";  
  142.                             switch(b.getIndex()){  
  143.                             case Body.DISH:  
  144.                                 str = "菜";  
  145.                                 break;  
  146.                             case Body.SHEEP:  
  147.                                 str = "羊";  
  148.                                 break;  
  149.                             case Body.WOLF:  
  150.                                 str = "狼";  
  151.                                 break;  
  152.                             }  
  153.                             if(flag == 1){  
  154.                                 System.out.println("向目的地运送:"+str);  
  155.                             }else{  
  156.                                 System.out.println("向目原来地方运送:"+str);  
  157.                             }  
  158.                             tarBody = b;  
  159.                             tar.add(b);  
  160.                             tar.add(people);  
  161.                             cur.remove(b);  
  162.                             cur.remove(people);  
  163.                             break;  
  164.                         }  
  165.                     }  
  166.                 }  
  167.             }  
  168.         }else{  
  169.             for(Body b : cur){  
  170.                 bFlag = false;  
  171.                 if(!b.equals(people)){  
  172.                     if(tarBody == null){  
  173.                         //比较剩下的Body,是否会出现弱者被吃掉的情况   
  174.                         //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。   
  175.                         for(Body bb : cur){  
  176.                             if(!bb.equals(b) && !bb.equals(people)){  
  177.                                 for(Body bbb : cur){  
  178.                                     if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){  
  179.                                         if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()  
  180.                                                 || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){  
  181.                                             bFlag = true;  
  182.                                             break;  
  183.                                         }  
  184.                                     }  
  185.                                 }  
  186.                                 if(bFlag){  
  187.                                     break;  
  188.                                 }  
  189.                             }  
  190.                         }  
  191.                     }else if(!tarBody.equals(b)){  
  192.                         //比较剩下的Body,是否会出现弱者被吃掉的情况   
  193.                         //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。   
  194.                         for(Body bb : cur){  
  195.                             if(!bb.equals(b) && !bb.equals(people)){  
  196.                                 for(Body bbb : cur){  
  197.                                     if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){  
  198.                                         if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()  
  199.                                                 || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){  
  200.                                             bFlag = true;  
  201.                                             break;  
  202.                                         }  
  203.                                     }  
  204.                                 }  
  205.                                 if(bFlag){  
  206.                                     break;  
  207.                                 }  
  208.                             }  
  209.                         }  
  210.                     }  
  211.                       
  212.                       
  213.                     if(!bFlag){  
  214.                         String str = "";  
  215.                         switch(b.getIndex()){  
  216.                         case Body.DISH:  
  217.                             str = "菜";  
  218.                             break;  
  219.                         case Body.SHEEP:  
  220.                             str = "羊";  
  221.                             break;  
  222.                         case Body.WOLF:  
  223.                             str = "狼";  
  224.                             break;  
  225.                         }  
  226.                         if(flag == 1){  
  227.                             System.out.println("向目的地运送:"+str);  
  228.                         }else{  
  229.                             System.out.println("向目原来地方运送:"+str);  
  230.                         }  
  231.                         tarBody = b;  
  232.                         tar.add(b);  
  233.                         tar.add(people);  
  234.                         cur.remove(b);  
  235.                         cur.remove(people);  
  236.                         break;  
  237.                     }  
  238.                 }  
  239.             }  
  240.         }  
  241.           
  242.     }  
  243. }  
public class Flash { static Body sheep; static Body dish; static Body wolf; static Body people; static Body tarBody; //当前运送的东西 final static ArrayList<Body> tarList = new ArrayList<Body>(); final static ArrayList<Body> curList = new ArrayList<Body>(); /** * @param args */ public static void main(String[] args) { //初始化羊 sheep = new Body(Body.SHEEP); sheep.setnAfraidIndex(Body.WOLF); sheep.setnLikeIndex(Body.DISH); //初始化菜 dish = new Body(Body.DISH); dish.setnAfraidIndex(Body.NONE); dish.setnLikeIndex(Body.NONE); //初始化狼 wolf = new Body(Body.WOLF); wolf.setnAfraidIndex(Body.NONE); wolf.setnLikeIndex(Body.SHEEP); //初始化特殊的人 people = new Body(Body.NONE); people.setnAfraidIndex(Body.NONE); people.setnLikeIndex(Body.NONE); curList.add(people); curList.add(wolf); curList.add(sheep); curList.add(dish); new Thread(){ public void run(){ while(tarList.toArray().length < 4){ if(curList.indexOf(people) != -1){ Transportation(tarList,curList,1); }else{ Transportation(curList,tarList,0); } } } }.start(); } public static void Transportation(ArrayList<Body> tar,ArrayList<Body> cur,int flag){ //随即取出一个备选的运送的Body boolean bFlag = false; if(!cur.equals(curList)){ boolean bFlag2 = false; //比较剩下的Body,是否会出现弱者被吃掉的情况 //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。 for(Body bb : cur){ if(!bb.equals(people)){ for(Body bbb : cur){ if(!bbb.equals(people) && !bbb.equals(bb)){ if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex() || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){ bFlag2 = true; break; } } } if(bFlag2){ break; } } } if(cur.toArray().length == 2 || bFlag2 == false){ tar.add(people); cur.remove(people); if(flag == 1){ System.out.println("向目的地运送:空"); }else{ System.out.println("向目原来地方运送:空"); } }else{ for(Body b : cur){ bFlag = false; if(!b.equals(people)){ if(tarBody == null){ //比较剩下的Body,是否会出现弱者被吃掉的情况 //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。 for(Body bb : cur){ if(!bb.equals(b) && !bb.equals(people)){ for(Body bbb : cur){ if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){ if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex() || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){ bFlag = true; break; } } } if(bFlag){ break; } } } }else if(!tarBody.equals(b)){ //比较剩下的Body,是否会出现弱者被吃掉的情况 //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。 for(Body bb : cur){ if(!bb.equals(b) && !bb.equals(people)){ for(Body bbb : cur){ if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){ if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex() || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){ bFlag = true; break; } } } if(bFlag){ break; } } } } if(!bFlag){ String str = ""; switch(b.getIndex()){ case Body.DISH: str = "菜"; break; case Body.SHEEP: str = "羊"; break; case Body.WOLF: str = "狼"; break; } if(flag == 1){ System.out.println("向目的地运送:"+str); }else{ System.out.println("向目原来地方运送:"+str); } tarBody = b; tar.add(b); tar.add(people); cur.remove(b); cur.remove(people); break; } } } } }else{ for(Body b : cur){ bFlag = false; if(!b.equals(people)){ if(tarBody == null){ //比较剩下的Body,是否会出现弱者被吃掉的情况 //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。 for(Body bb : cur){ if(!bb.equals(b) && !bb.equals(people)){ for(Body bbb : cur){ if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){ if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex() || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){ bFlag = true; break; } } } if(bFlag){ break; } } } }else if(!tarBody.equals(b)){ //比较剩下的Body,是否会出现弱者被吃掉的情况 //首先取出一个Body,看下剩下的Body中有没有对自己不利的。。 for(Body bb : cur){ if(!bb.equals(b) && !bb.equals(people)){ for(Body bbb : cur){ if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){ if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex() || bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){ bFlag = true; break; } } } if(bFlag){ break; } } } } if(!bFlag){ String str = ""; switch(b.getIndex()){ case Body.DISH: str = "菜"; break; case Body.SHEEP: str = "羊"; break; case Body.WOLF: str = "狼"; break; } if(flag == 1){ System.out.println("向目的地运送:"+str); }else{ System.out.println("向目原来地方运送:"+str); } tarBody = b; tar.add(b); tar.add(people); cur.remove(b); cur.remove(people); break; } } } } } } 这个是物体类,我把人菜狼和羊归为了物体
  1. public class Body {  
  2.           
  3.     public static final int NONE = 0;  
  4.     public static final int SHEEP = 1;  
  5.     public static final int DISH = 2;  
  6.     public static final int WOLF = 3;  
  7.       
  8.     private int index;  
  9.       
  10.     private int nLikeIndex;  
  11.       
  12.     private int nAfraidIndex;  
  13.       
  14.     public Body(int index){  
  15.         this.index = index;  
  16.     }  
  17.   
  18.   
  19.     public int getIndex() {  
  20.         return index;  
  21.     }  
  22.   
  23.   
  24.     public void setIndex(int index) {  
  25.         this.index = index;  
  26.     }  
  27.   
  28.   
  29.     public int getnLikeIndex() {  
  30.         return nLikeIndex;  
  31.     }  
  32.   
  33.   
  34.     public void setnLikeIndex(int nLikeIndex) {  
  35.         this.nLikeIndex = nLikeIndex;  
  36.     }  
  37.   
  38.   
  39.     public int getnAfraidIndex() {  
  40.         return nAfraidIndex;  
  41.     }  
  42.   
  43.   
  44.     public void setnAfraidIndex(int nAfraidIndex) {  
  45.         this.nAfraidIndex = nAfraidIndex;  
  46.     }     
  47. }