亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? macps.java

?? 野人與傳教士
?? JAVA
字號:
import java.io.*;
import java.util.*;

/*建立數(shù)據(jù)結(jié)構(gòu):RiverSide*/

class RiverSide {

    int Cannibal;
    int Missionary;

       public RiverSide() { 

       }

       public String toString() {  //不會輸出散列碼
           return " Cannibal " + Cannibal + " Missionary " + Missionary;

       }

}

/*建立數(shù)據(jù)結(jié)構(gòu):Boat*/

class Boat {

    int Cannibal;
    int Missionary;

        public Boat() {

        }

        public Boat( int Cannibal , int Missionary ) {
            this.Cannibal = Cannibal;
            this.Missionary = Missionary;
        }

}

/*建立數(shù)據(jù)結(jié)構(gòu):Node*/

class Node {

  int f , h , steps , id , parentid;
  Boat boat;
  RiverSide riverside1;
  RiverSide riverside2;
  int side;

      public Node() {
      
      }
      
      public Node( int f , int h , int steps , Boat boat , RiverSide riverside1 , RiverSide riverside2 , int side , int id , int parentid ) {
          this.f = f;
          this.h = h;
          this.steps = steps;
          this.boat = boat;
          this.riverside1 = riverside1;
          this.riverside2 = riverside2;
          this.side = side;
          this.id = id;
          this.parentid = parentid;

      }
      
}

/*主類Missionary And Cannibal Pass Solution*/

class MACPS {

    public Vector Open=new Vector();
    public Vector Close=new Vector();
    int id = 0;

        public void getSolutionStep() {

            Boat boat1 = new Boat();
            Boat boat2 = new Boat();
            RiverSide riverside1 = new RiverSide();
            RiverSide riverside2 = new RiverSide();
            RiverSide riverside3 = new RiverSide();
            RiverSide riverside4 = new RiverSide();
            boolean flag =true;

                Node Source = new Node( 0 , 0 , 0 , boat1 , riverside1 , riverside2 , 0 , 0 , 0 );  	//初始化起始節(jié)點

                    Source.riverside1.Cannibal = 3;
                    Source.riverside1.Missionary = 3;
                    Source.riverside2.Cannibal = 0;
                    Source.riverside2.Missionary = 0;
                    Source.boat.Cannibal = 0;
                    Source.boat.Missionary = 0;
                    Source.side = 1;
                    Source.id = 0;
                    Source.parentid = 0;
                    Source.h = 4;
                    Source.f = 4;
                    Source.steps = 0;

                Node Target = new Node( 0 , 0 , 0 , boat2 , riverside3 , riverside4 , 0 , 0 , 0 );   	//初始化目標(biāo)節(jié)點
                    Target.riverside1.Cannibal=0;
                    Target.riverside1.Missionary=0;
                    Target.riverside2.Cannibal=3;
                    Target.riverside2.Missionary=3;
                    Target.boat.Cannibal=0;
                    Target.boat.Missionary=0;

                push( Source , Open );
                Node Current = Source;
                while( flag == true ) {                       
                    if( Open.isEmpty() ) {	//表頭為空結(jié)束循環(huán)
                        flag = false;
                        break;
                        
                    }
                    
                    Current = pop( Open );
                    push( Current , Close );
                    if( isTarget( Current , Target ) )    //比較是否是目標(biāo)節(jié)點    
                        break;
                    extend( Current , Target , Open );    //擴展OPEN中的節(jié)點       
                    atFirstOpen();                        //將OPEN排序        
                
                }

                Node Father;               //從目標(biāo)節(jié)點通過Father節(jié)點找出合法算符,繼續(xù)擴展Father
                Vector Result = new Vector();
                if( flag == true ) {
                    Result.add( Current );
                    int m = Current.parentid;
                    int k = 0;
                    
                        while( m > 0 ) {
                            Father = found( m , Close , Target );
                            Result.add( Father );
                            m = Father.parentid;
                            k++;
                            
                        }
                    
                }
                
                else {
                   System.out.print("solution isn't found");
                   
                                  }
                
              Result.add(Source);
              Stack aaa = new Stack();
              Stack bbb = new Stack();
              Stack ccc = new Stack();
                  for( int i = 0; i < Result.size(); i++ ) {
                      /*System.out.println( ( (Node)Result.get(i) ).riverside1 + " " + " withboat: " + ( (Node)Result.get(i) ).side 
 + "--------" + ( (Node)Result.get(i) ).riverside2 );      */               
                      aaa.push( ( (Node)Result.get(i) ).riverside1 );
                      bbb.push( ( (Node)Result.get(i) ).side );
                      ccc.push( ( (Node)Result.get(i) ).riverside2 );
                      
                  }

                  for( int i = 0; i < Result.size(); i++ ) {
                      System.out.println("Left Side: " + aaa.pop() + " withboat: " + bbb.pop() + "\n" );
                      System.out.println("Right Side: " + ccc.pop() + "\n\n");

                  }

               
        }
        
        public void push( Node sour , Vector open ) {
            open.add( sour );
             
        }

        public Node pop( Vector open ) {             Node firstnode = (Node)open.get(0);
            open.removeElementAt(0);
                return firstnode;
        }

        public boolean isTarget( Node cur,Node tar ) {
            if( cur.riverside1.Cannibal == tar.riverside1.Cannibal && cur.riverside1.Missionary == tar.riverside1.Missionary && cur.side == tar.side )
                return true;
            else 
                return false;
        }

        public void extend( Node current , Node tar , Vector open ) {    //找出下一步合法操作,并擴展節(jié)點

            int nCannibal1 = 0;
            int  nMissionary1 = 0;
            int nCannibal2 = 0;
            int  nMissionary2 = 0;
            int i;

            Boat boatState[] = new Boat [5];
            for( i = 0; i < 5;i++ )
                boatState[i] = new Boat();

            if(current.side==1) {	//盡量多的去到目標(biāo)河岸,運2個的操作符優(yōu)先,野人優(yōu)先                                     
                boatState[0].Cannibal = 2;
                boatState[0].Missionary = 0;
                boatState[1].Cannibal = 1;
                boatState[1].Missionary = 1;
                boatState[2].Cannibal = 0;
                boatState[2].Missionary = 2;
                boatState[3].Cannibal = 1;
                boatState[3].Missionary = 0;
                boatState[4].Cannibal = 0;
                boatState[4].Missionary = 1;

            }

            else {	//盡量少的回來,運1個的操作符優(yōu)先
                boatState[0].Cannibal = 0;
                boatState[0].Missionary = 1;
                boatState[1].Cannibal = 1;
                boatState[1].Missionary = 0;
                boatState[2].Cannibal = 0;
                boatState[2].Missionary = 2;
                boatState[3].Cannibal = 1;
                boatState[3].Missionary = 1;
                boatState[4].Cannibal = 2;
                boatState[4].Missionary = 0;
          }

        boolean  flag = true;
        int j;
            for( j = 0; j < 5; j++ ) {
                if(current.side==1) { //船在岸就運人過去,就做“-”運算
                    nCannibal1 = current.riverside1.Cannibal - boatState[j].Cannibal;
                    nMissionary1 = current.riverside1.Missionary - boatState[j].Missionary;
                    
                }
                 
                else {	//船不在岸運人過來,做“+”運算
                    nCannibal1 = current.riverside1.Cannibal + boatState[j].Cannibal;
                    nMissionary1 = current.riverside1.Missionary + boatState[j].Missionary;
                }
                //對岸的人數(shù)
                nCannibal2 = 3 - nCannibal1;
                nMissionary2 = 3 - nMissionary1;

                if( ( nCannibal1 <= nMissionary1 || nMissionary1 == 0 ) && ( nCannibal2 <= nMissionary2 || nMissionary2 == 0 ) && nCannibal1 >= 0 && nMissionary1 >= 0 && nCannibal2 >= 0 && nMissionary2 >= 0 ) { 	//判斷擴展的節(jié)點是否合法。即野人少于傳教士
                    if(j<5) {
                        current.boat.Cannibal = boatState[j].Cannibal;
                        current.boat.Missionary = boatState[j].Missionary;
                        Boat boat = new Boat();
                        RiverSide riverside1 = new RiverSide();
                        RiverSide riverside2 = new RiverSide();

                        Node next = new Node( 0 , 0 , 0 , boat , riverside1 , riverside2 , 0 , 0 , 0 );

                            next.riverside1.Cannibal = nCannibal1;
                            next.riverside1.Missionary = nMissionary1;
                            next.riverside2.Cannibal = nCannibal2;
                            next.riverside2.Missionary = nMissionary2;
                            next.boat.Cannibal = 0;
                            next.boat.Missionary = 0;
                            next.id = ++id;
                            next.parentid = current.id;
                            next.steps = current.steps+1;
                            if( next.steps%2 == 0 )
                                next.side = 1;
                            else
                                next.side = 0;
                            next.h = next.riverside1.Cannibal+next.riverside1.Missionary - 2*next.side;
                            next.f = next.h + next.steps;
                            if( next.id != 0 ) { 	//判斷擴展節(jié)點是否在Close中                                     
                                int k = 0;
                               
                                    while( ( k<Close.size() ) ) {
                                        if( ( next.riverside1.Cannibal != ( (Node)( Close.get(k) ) ).riverside1.Cannibal) || 
( next.riverside1.Missionary != ( (Node)( Close.get(k) ) ).riverside1.Missionary ) || ( next.side != ( (Node)(Close.get(k) ) ).side ) )
                                            flag = false;
                                        else
                                            flag = true;
                                        if( flag == true )
                                            break;
                                            k++;
                                            
                                        }
                                
                                    }

                            if(flag == false)
                                push(next,Open);              //把擴展點加入Open                         
                            
                    }

                }

             }
        
       }

       public void atFirstOpen() {          //把最小值放在Open表首位
           int indexmin=0;
           Node temp;
           Node node0 = (Node)Open.get(0);
           int minvalue = node0.f;
           
               for( int i = 0; i < Open.size(); i++ ) {
                   Node opei = (Node)Open.get(i);
                   if( opei.f < minvalue ) {
                       minvalue = opei.f;
                       indexmin = i;
                       
                   }
                   
               }
           
               temp = (Node)Open.get(0);
               Open.setElementAt( (Node)Open.elementAt(indexmin) , 0 );
               Open.setElementAt( temp , indexmin );
               
        }

        public Node found( int k , Vector vec , Node source ) {     //Close表中id相同的節(jié)點                   
            Node result = source;
            int i;
            
                for( i = 0; i < vec.size(); i++ ) {
                    if( k == ( (Node)vec.get(i) ).id ) {
                        result = (Node)vec.get(i);
                    }
                }
                    return result;
        }
        public static void main(String[] args){
            MACPS a = new MACPS();
            a.getSolutionStep();
        }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体在线国模精品偷拍| 国产精品456| 日韩三级电影网址| 精品一区二区日韩| 国产欧美一区二区精品仙草咪| 成人性生交大片免费看在线播放| 中文子幕无线码一区tr| 91免费在线看| 午夜电影一区二区三区| 亚洲成av人片一区二区梦乃| 国产成人亚洲综合色影视| 国产精品无圣光一区二区| 91浏览器打开| 天天综合网天天综合色| 日韩精品一区二区三区在线播放| 国产精品系列在线播放| 自拍偷自拍亚洲精品播放| 欧美乱妇一区二区三区不卡视频| 久久不见久久见免费视频1| 国产精品女人毛片| 欧美亚洲国产怡红院影院| 蜜臂av日日欢夜夜爽一区| 国产亚洲欧美日韩俺去了| 色悠悠久久综合| 美女视频免费一区| 国产精品久久久久久久午夜片| 欧美亚洲另类激情小说| 精品日韩在线观看| 成人aaaa免费全部观看| 亚洲国产一区视频| 精品国产不卡一区二区三区| 97久久人人超碰| 日本亚洲欧美天堂免费| 国产精品视频九色porn| 欧美日韩国产另类不卡| 国产精品自产自拍| 亚洲永久精品大片| 久久久午夜精品| 在线观看亚洲一区| 国产伦精品一区二区三区免费迷 | 91亚洲国产成人精品一区二三 | 亚洲日本在线观看| 欧美一卡二卡在线| av在线不卡免费看| 91麻豆精品国产| 成人动漫视频在线| 日韩国产精品久久久久久亚洲| 欧美激情一区二区三区不卡 | 欧美性感一类影片在线播放| 国内精品国产三级国产a久久| 一区二区三区中文字幕精品精品| 日韩欧美在线综合网| 一本到一区二区三区| 国内精品免费在线观看| 偷窥少妇高潮呻吟av久久免费| 国产欧美日韩另类一区| 欧美一区二区在线免费播放| 97精品超碰一区二区三区| 久久99精品久久久久婷婷| 夜夜精品浪潮av一区二区三区| 久久久久9999亚洲精品| 91精品中文字幕一区二区三区| 97久久久精品综合88久久| 国产一区二区在线视频| 五月激情综合网| 亚洲精品日产精品乱码不卡| 国产老肥熟一区二区三区| 亚洲一区二区三区国产| 国产精品免费久久久久| 精品国产伦理网| 欧美狂野另类xxxxoooo| 色婷婷综合久久久久中文| 国产精品一卡二卡| 久久超碰97人人做人人爱| 亚洲国产欧美在线| 亚洲精品视频在线看| 国产欧美久久久精品影院| 欧美不卡视频一区| 在线不卡a资源高清| 在线观看一区二区精品视频| 99在线精品免费| 丰满少妇在线播放bd日韩电影| 久久精品国产精品亚洲综合| 午夜电影一区二区三区| 亚洲一区二区偷拍精品| 亚洲欧美日韩国产中文在线| 中文字幕高清不卡| 国产欧美一区二区在线观看| 精品福利在线导航| 日韩精品最新网址| 欧美一二区视频| 久久精品国产一区二区三| 无码av免费一区二区三区试看 | 国产一区二区不卡在线| 免费人成精品欧美精品| 亚洲成精国产精品女| 一区二区三区四区五区视频在线观看| 国产精品久久久久7777按摩 | 亚洲日本乱码在线观看| 中文一区在线播放| 国产精品女主播在线观看| 国产日产欧美精品一区二区三区| 久久一区二区视频| 久久婷婷国产综合精品青草| 亚洲精品一区二区在线观看| 欧美电影免费观看高清完整版在 | 国产精品一二一区| 九九热在线视频观看这里只有精品| 欧美日韩国产精品自在自线| 91福利在线观看| 色av综合在线| 色噜噜狠狠色综合中国 | 99久久久无码国产精品| 成人av网站在线观看| av在线免费不卡| 99麻豆久久久国产精品免费| 91片在线免费观看| 日本精品一级二级| 欧美在线啊v一区| 欧美日韩欧美一区二区| 7777精品伊人久久久大香线蕉的 | 国内一区二区视频| 国产乱一区二区| 成人视屏免费看| 不卡一区中文字幕| 色综合久久久久| 欧美视频三区在线播放| 91精选在线观看| 精品国产成人在线影院| 欧美极品aⅴ影院| 日韩码欧中文字| 亚洲一区二区在线观看视频| 欧美肥妇free| 日韩女优av电影| 欧美日韩一区二区三区高清| 91视视频在线直接观看在线看网页在线看 | 色八戒一区二区三区| 欧美在线高清视频| 日韩视频在线你懂得| 久久伊人蜜桃av一区二区| 国产精品麻豆久久久| 亚洲综合激情另类小说区| 日韩精品午夜视频| 国产乱子伦一区二区三区国色天香| 成人午夜激情片| 在线观看视频一区二区 | 日韩一区二区三区观看| 精品91自产拍在线观看一区| 国产精品狼人久久影院观看方式| 一区二区三区在线视频播放| 免费在线看成人av| 成人深夜视频在线观看| 欧美日韩一区三区| 亚洲精品一区二区三区精华液| 91在线视频在线| 欧美日韩精品欧美日韩精品| 欧美成人官网二区| 亚洲特级片在线| 日韩在线卡一卡二| 成人精品免费看| 欧美日韩中字一区| 久久久不卡网国产精品二区| 亚洲精品日韩专区silk| 麻豆精品国产传媒mv男同| 国产成人av影院| 欧美视频一区二区在线观看| 久久久久国产精品免费免费搜索| 亚洲精品国产一区二区精华液 | 亚洲综合一二区| 久久精品72免费观看| www.久久久久久久久| 日韩欧美国产麻豆| 亚洲六月丁香色婷婷综合久久| 久久成人羞羞网站| 91成人网在线| 久久精品男人的天堂| 午夜免费久久看| 成人亚洲精品久久久久软件| 91麻豆精品国产91久久久久久久久| 亚洲精品中文在线| 蜜臀精品久久久久久蜜臀| www.亚洲免费av| 欧美一级在线视频| 亚洲色图在线播放| 国产制服丝袜一区| 欧美日韩电影在线播放| 国产精品国产精品国产专区不蜜| 日韩av一级电影| 色婷婷亚洲精品| wwwwxxxxx欧美| 日韩精品欧美成人高清一区二区| 99久久婷婷国产综合精品| 精品久久一二三区| 亚洲国产精品一区二区久久恐怖片| 国产suv精品一区二区883| 91精品国产高清一区二区三区蜜臀| 中文字幕中文字幕一区二区| 国内精品不卡在线| 欧美精品 国产精品| 亚洲男人天堂av网|