青蛙过河问题
2017-01-10 16:02
288 查看
package coding; import java.util.ArrayList; import java.util.List; class FrogOverRiver { public List<Frog>initializeFrogQueue(){ List<Frog>frogQueue=new ArrayList<Frog>(); frogQueue.add(new Frog(0,"左1",Frog.frogDirection.向右,false)); frogQueue.add(new Frog(1,"左2",Frog.frogDirection.向右,true)); frogQueue.add(new Frog(2,"左3",Frog.frogDirection.向右,true)); frogQueue.add((new Frog(3))); frogQueue.add(new Frog(3,"右1",Frog.frogDirection.向左,true)); frogQueue.add(new Frog(4,"右1",Frog.frogDirection.向左,true)); frogQueue.add(new Frog(5,"右1",Frog.frogDirection.向左,false)); return frogQueue; } private List<Frog>editFrogQueue(List<Frog>frogQueue,String frogName,int oldEmptyPositionID,int newEmptyPositionID){ List<Frog>newFrogQueue=new ArrayList<Frog>(); for(int i=0;i<frogQueue.size();i++){ Frog frog=(Frog)frogQueue.get(i); Frog newFrog=new Frog(frog); if(newFrog.isEmpty) newFrog.position=newEmptyPositionID; if(newFrog.frogName==frogName){ newFrog.position=oldEmptyPositionID; } newFrog.canJump=false; if((newEmptyPositionID-newFrog.position)>0&&(newEmptyPositionID-newFrog.position)<3&&newFrog.direction==Frog.frogDirection.向右) newFrog.canJump=true; if((newFrog.position-newEmptyPositionID)>0&&(newFrog.position-newEmptyPositionID)<3&&newFrog.direction==Frog.frogDirection.向左) newFrogQueue.add(newFrog); } return newFrogQueue; } private boolean isComplete(List<Frog>frogQueue){ return(frogQueue.get(0).position>3&&frogQueue.get(1).position>3&&frogQueue.get(2).position>3); } private boolean canFrogJump(List<Frog>frogQueue){ for(int i=0;i<frogQueue.size();i++){ Frog frog=(Frog)frogQueue.get(i); if(frog.canJump) return true; } return false; } public String frogJump(List<Frog>frogQueue,int emptyPositionId){ String frogJumpInfo=""; for(int i=0;i<frogQueue.size();i++){ Frog frog=(Frog)frogQueue.get(i); if(frog.isEmpty) continue; if(!frog.canJump) continue; frogJumpInfo="青蛙"+frog.frogName+" "+frog.direction+"跳到"+(emptyPositionId)+"\r\n"; int newPositionId=frog.position; List<Frog>newFrogQueue=this.editFrogQueue(frogQueue,frog.frogName,emptyPositionId,newPositionId); if(this.canFrogJump(newFrogQueue)){ frogJumpInfo+=this.frogJump(newFrogQueue,newPositionId); }else{ if(this.isComplete(newFrogQueue)){ frogJumpInfo=frogJumpInfo+"成功"; break; } } if(frogJumpInfo.contains("成功")) break; } return frogJumpInfo; } } class Frog{ static enum frogDirection{向左,向右}; public String frogName; public int position; public frogDirection direction; public boolean canJump; public boolean isEmpty=false; public Frog(int position,String frogName,frogDirection direction,boolean canJump){ this.position=position; this.frogName=frogName; this.direction=direction; this.canJump=canJump; } public Frog(int position){ this.frogName="空"; this.position=position; this.canJump=false; this.isEmpty=true; } public Frog(Frog frog){ this.position=frog.position; this.frogName=frog.frogName; this.direction=frog.direction; this.canJump=frog.canJump; this.isEmpty=frog.isEmpty; } } public class cha09_frog{ public static void main(String[] args) { // TODO Auto-generated method stub FrogOverRiver f=new FrogOverRiver(); List frogQueue=f.initializeFrogQueue(); System.out.println(f.frogJump(frogQueue,3)); } }
相关文章推荐
- 对青蛙过河问题以及hanoi塔的思考
- 青蛙过河问题
- 用回溯法解决好玩的青蛙过河问题
- 【面试】Liveramp 面试题 面经 青蛙过河问题
- 青蛙过河问题
- 递归问题——以全排列、青蛙过河问题为例
- 动态规划 DP leetcode403 青蛙过河问题
- MOOC清华《程序设计基础》第5章:青蛙过河问题
- 编程求解机械迷城第11关中类青蛙过河的问题
- 青蛙过河的问题
- 哈理工OJ 1186 青蛙过河 (DP问题)
- 自动状态机实现经典过河问题------不是我不借你
- 关于三只母鸡和三只小鸡过河问题
- 青蛙过河
- 农夫过河问题——C语言程序设计(转)
- Java中关于农夫过河的问题
- 猪过河的问题
- 一个青蛙过河程序及其解析
- 用程序解决过河问题
- 人狼羊菜过河问题 (Java代码实现)