青蛙过河

来源:互联网 发布:centos hadoop 安装 编辑:程序博客网 时间:2024/04/28 00:40

最近两天在网上看了一些青蛙过河的算法。。。。。

不知道是我理解有问题,还是他们写的有问题。。。。。好坑啊!!!!反正是得不到正确的结果

自己着摸着也弄了一个

package frog;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class OverRiver {private static final String LEFT_LOG = "<-";private static final String RIGHT_LOG = "->";private static final String NOT_NAME = "O";private boolean isfinish = false;private int theNumberOfStone;private List<Frog> frogs;public OverRiver(int theNumberOfStone){this.theNumberOfStone = theNumberOfStone;frogs = new ArrayList<Frog>();init(theNumberOfStone);}private void init(int theNumberOfStone){for(int i=1;i<=theNumberOfStone;i++){if(i<((theNumberOfStone+1)/2)){frogs.add(new Frog(RIGHT_LOG, Direction.TO_THE_RIGHT));}else if(i>((theNumberOfStone+1)/2)){frogs.add(new Frog(LEFT_LOG, Direction.TO_THE_LEFT));}else{frogs.add(new Frog(NOT_NAME, Direction.I_AM_NULL));}}printOut();}public void overRiverStart(){if(!isfinish){//判断向右的青蛙能否跳跃过向左青蛙for(int i = 0; i < frogs.size(); i++){Frog frog = frogs.get(i);if(frog.getDirection()==Direction.TO_THE_RIGHT){if(i==(frogs.size()-1)){continue;}int nextDir = frogs.get(i+1).getDirection();if(nextDir==Direction.TO_THE_LEFT){if(i==(frogs.size()-2)){continue;}if(frogs.get(i+2).getDirection()==Direction.I_AM_NULL){change(frogs.get(i+2), frog);printOut();overRiverStart();break;}}}}//判断向左的青蛙能否跳跃过向右青蛙for(int i = 0; i < frogs.size(); i++){Frog frog = frogs.get(i);if(frog.getDirection()==Direction.TO_THE_LEFT){if(i==0){continue;}int nextDir = frogs.get(i-1).getDirection();if(nextDir==Direction.TO_THE_RIGHT){if(i==1){continue;}if(frogs.get(i-2).getDirection()==Direction.I_AM_NULL){change(frogs.get(i-2), frog);printOut();overRiverStart();break;}}}}//判断前三个中向右的青蛙能否向右移动一位,后四个中向左的青蛙能否向左移动一位for (int i = 0; i < frogs.size(); i++) {Frog frog = frogs.get(i);if(i<((frogs.size()-1)/2)){if(frog.getDirection()==Direction.TO_THE_RIGHT){if(frogs.get(i+1).getDirection()==Direction.I_AM_NULL){change(frogs.get(i+1), frog);printOut();overRiverStart();break;}}}if(i>=((frogs.size()-1)/2)){if(frog.getDirection()==Direction.TO_THE_LEFT){if(frogs.get(i-1).getDirection()==Direction.I_AM_NULL){change(frogs.get(i-1), frog);printOut();overRiverStart();break;}}}}//判断前三个中向左的青蛙能否向左移动一位,后四个中向右的青蛙能否向右移动一位for (int i = 0; i < frogs.size(); i++) {Frog frog = frogs.get(i);if(i<((frogs.size()-1)/2)){if(frog.getDirection()==Direction.TO_THE_LEFT){if(i==0){continue;}if(frogs.get(i-1).getDirection()==Direction.I_AM_NULL){change(frogs.get(i-1), frog);printOut();overRiverStart();break;}}}if(i>=((frogs.size()-1)/2)){if(frog.getDirection()==Direction.TO_THE_RIGHT){if(i==frogs.size()-1){continue;}if(frogs.get(i+1).getDirection()==Direction.I_AM_NULL){change(frogs.get(i+1), frog);printOut();issuccess();overRiverStart();break;}}}}}}public void change(Frog f1 , Frog f2){f1.setDirection(f2.getDirection());f1.setFrogName(f2.getFrogName());f2.setDirection(Direction.I_AM_NULL);f2.setFrogName(NOT_NAME);}public void printOut(){for (Iterator iterator = frogs.iterator(); iterator.hasNext();) {Frog frog = (Frog) iterator.next();System.out.print(frog.getFrogName()+" ");}System.out.println();}public void issuccess(){int num=0;for (int i = 0; i < (frogs.size()+1)/2; i++) {if(i<(frogs.size()-1)/2){if(frogs.get(i).getDirection()==1){num++;}}else {if(frogs.get(i).getDirection()==0){num++;}}}if(num==(frogs.size()+1)/2){isfinish = true;}else{isfinish= false;}}}

结果:

-> -> -> O <- <- <- -> -> O -> <- <- <- -> -> <- -> O <- <- -> -> <- -> <- O <- -> -> <- O <- -> <- -> O <- -> <- -> <- O -> <- -> <- -> <- <- -> O -> <- -> <- <- -> <- -> O -> <- <- -> <- -> <- -> O <- -> <- -> <- O -> <- -> <- O <- -> -> <- O <- -> <- -> -> <- <- O -> <- -> -> <- <- <- -> O -> -> <- <- <- O -> -> -> 



0 1
原创粉丝点击