修改文章
标题:
内容:
早就该贴出来了,但是前一段时间一直都上不来,结果这么长时间,把原文件也弄丢了。没办法,重新写了一个。(为了写这个程序,我还找TA把以前的作业要回来,因为包括作业在内的所有程序都弄丢了) 因为是新写的,在设计方面,我是指数据结构,有所不同,以前设计的正负数的结构并不好用,并且表示船所在位置的时候也不舒服,所以我做了一个State类,Aside表示在A岸的人数,Cside就是C岸。所有的数组,[0]表示正常人的个数,[1]是神经病的个数,都使用正数表示。Boat表示船在那一边,如果是-1就是C,1就是A. //////// file: river.java import java.util.*; public class river { public static void main(String args[]) { int nInput; int cInput; do { System.out.print("\n\nWe assume all the people are on the A side.\nLet's input the number n first:"); nInput = getter.getInt(System.in); } while (nInput<1); do { System.out.print("\nAnd you must decide the max load of the boat:"); cInput = getter.getInt(System.in); if (cInput<2) System.out.println("Do you think such a small boat could fulfill our task, man?"); } while (cInput<2); System.out.println(); int A[]=new int[2]; int C[]=new int[2]; A[0]=nInput; A[1]=nInput; C[0]=0; C[1]=0; State initState = new State(A,C,1,cInput); State goalState = new State(C,A,-1,cInput); BLoop: for (int Bound=1;;Bound++) { System.out.println("Bound = "+Bound); Vector stateList = new Vector(); Vector Solution = new Vector(); stateList.add(initState); WLoop: while (stateList.size()>0) { State nowState = new State(); do { if (stateList.size()==0) continue BLoop; nowState = (State)(stateList.remove(stateList.size()-1)); if (nowState==null) Solution.remove(Solution.size()-1); } while (nowState==null); if (nowState.stateEqual(goalState)) { giveSolution(Solution); } else if(Solution.size()>=Bound) { continue WLoop; } else { Solution.add(nowState); stateList.add(null); for (int i=0;i
numConstraint) return false; if (inBoat[0]+inBoat[1]<=0) return false; return true; } public void printState() { System.out.println(); System.out.println("Normal\tSilly\t\tNormal\tSilly"); System.out.println(Aside[0]+"\t"+Aside[1]+"\t\t"+Cside[0]+"\t"+Cside[1]); System.out.println("Boat State: "+Boat); } public boolean stateEqual(State compState) { if (compState==null) return false; for (int i=0;i<2;i++) { if (this.Aside[i]!=compState.Aside[i]) return false; if (this.Cside[i]!=compState.Cside[i]) return false; } if (this.Boat!=compState.Boat) return false; return true; } } 本来想打包然后上传上来,无奈这里最近好象有些功能不能用,如果懒到粘贴复制一边都不想的话,就请你在下面跟贴,附上你的油箱地址,我给你寄过去好了 上面的贴,英文的,我会抽时间把他翻译过来,但是不是现在,因为现在要期末考试了,我还想多点时间复习。我知道用英文的不好,但是当时我也是没有办法。有想不通的还可以继续骂我 稍后我会把我们的一道作业题贴上来,是关于类似华容道问题的。有兴趣地可以做一做,我恰好这次作业的了满分,所以有什么问题可以跟我的作业比较,虽然编得也不好但是总算是有一个可以参照的嘛 类似的搜索问题,是所有棋类游戏人工智能的基础,我们班有好几个project都是以它为基础,做出很好的游戏来的,希望有更多人弄清楚它 在源程序里面,为了简化键盘输入,我使用了我们数据库project小组的源代码,getter.java内的所有代码不是我写的,原作者是harry,没有经得同意就擅自使用,希望Harry不要生气。 就到这里,上课去了....
表情:
返回