论坛首页 入门技术论坛

三只大老虎和三只小老虎过河

浏览 19350 次
精华帖 (6) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (6)
作者 正文
   发表时间:2009-01-13  
感觉像操作系统的东西。
印象中可以使用图算法中的有向图、最小二分图覆盖等等。
0 请登录后投票
   发表时间:2009-01-14  
我玩这个flash游戏,好像是僵尸和人的
0 请登录后投票
   发表时间:2009-01-14  
盲目搜索就够了
0 请登录后投票
   发表时间:2009-01-14  
看不太懂,能加上点注释就好了。
0 请登录后投票
   发表时间:2009-01-14  
呀,这不是狼和羊过河的那个吗~挺有意思,回去自己也写个算法试试~
0 请登录后投票
   发表时间:2009-01-14  
这个网上有个flash游戏的  。。。 当时觉得好难  多玩几次就过了
0 请登录后投票
   发表时间:2009-01-15  
以前做的题目,好象是3只小老虎都不会划船啊.
0 请登录后投票
   发表时间:2009-01-15   最后修改:2009-01-15
呵呵,楼主很会玩哦~
0 请登录后投票
   发表时间:2009-01-15   最后修改:2009-01-17
qianjigui 写道
感觉像操作系统的东西。
印象中可以使用图算法中的有向图、最小二分图覆盖等等。

图是比较好的思路

先解析所有的状态 如ABCabc| , BCbc|Aa , ...... ,|ABCabc

从ABCabc| -> 中间状态 ->....->|ABCabc

这就变成了找到可行路径,最小路径的问题了

不过反正都是从开始找起,一边搜一边找孩子也一样了,

jjcang 写道
盲目搜索就够了。

注意不要走进 x->y->z->x.....-z-x->y->z....这样的循环


public class Status { 
    
     String status;
     List<Status> children;

     Status(String s){ 
          status = s; 
     }
     
     public void getAllChildrenStatus(){
        //解析status字符串,找到其所有下一步
        //放入到children队列中
        .......
     }   

     public eques(){...}
     public hashcode(){...}
}

public class StatusManager{
     
     private Status startStatus;

     private Status endStatus;
     
     StatusManager(Status start,Status end){

	     startStatus = start;

         endStatus  = end;
     }
     
     // 记录当前所走过的路径,避免重复
     // 如 A->B->C->....A->B->C->A 
     // 每一种状态最多只出现一次
     private static List moveRecord<Status> = new ArrayList();     
      
     //判断当前状态是否已经走过    
     public boolean RecordHave(Status s){...}

     public void StatusSearch(){
	      StatusSearch(startStatus);
     }

     public void StatusSearch(Status currentNode){

          moveRecord.add(curstatus);

          currentNodegetAllChildrenStatus();

          //遍历所有孩子
          for(Status s : currentNode.children){
          
                // 如果孩子已经在moveRecord中,那么我们之前走到过这一步
                // 如果和endNode相等,则为所求路径,打印 :)
                // 递归
                if(!RecordHave(s)){
                       if(s.equals(endNode){
                           // print all value in current list;
                           // 找到所有的路径,这可能只是其中一种
                           ........
                           continue;
                      }

		      StatusSearch(s);

                } 

         } 
 
           //回到上一步
              moveRecord.remove(moveRecord.size());          
    }  
}

0 请登录后投票
   发表时间:2009-01-16  
先过一对子不会划船的母子;
再过剩下两只大老虎;
最后过剩下两只小老虎。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics