编程解决各种问题(二) ----------------Flash 经典智力游戏(
发布时间:2020-12-15 06:55:33 所属栏目:百科 来源:网络整理
导读:第二个问题:这回是用船把这三个僧侣和三个鬼运到河对面,但是千万要注意,当一边的鬼的数量多于僧侣,鬼就会吃掉僧侣。比上一题难了点,不过还是可以解开的吧! http://www.chinaren.com/20050330/n224935292.shtml 逻辑处理类 import java.util.ArrayList;
第二个问题:这回是用船把这三个僧侣和三个鬼运到河对面,但是千万要注意,当一边的鬼的数量多于僧侣,鬼就会吃掉僧侣。比上一题难了点,不过还是可以解开的吧! http://www.chinaren.com/20050330/n224935292.shtml 逻辑处理类 import java.util.ArrayList; public class Flash { static ArrayList<Body> curList = new ArrayList<Body>(); static ArrayList<Body> tarList = new ArrayList<Body>(); static boolean bFlag = false; //用于 标记船在哪里 false表示在原地方 true表示在目的地 static ArrayList<Body> list = new ArrayList<Body>(); public static void main(String[] args) { //初始化3个人 Body p1 = new Body(); p1.setIndex(Body.PEOPLE); Body p2 = new Body(); p2.setIndex(Body.PEOPLE); Body p3 = new Body(); p3.setIndex(Body.PEOPLE); //初始化3个鬼 Body g1 = new Body(); g1.setIndex(Body.GHOST); Body g2 = new Body(); g2.setIndex(Body.GHOST); Body g3 = new Body(); g3.setIndex(Body.GHOST); curList.add(p1); curList.add(p2); curList.add(p3); curList.add(g1); curList.add(g2); curList.add(g3); new Thread(){ public void run(){ while(tarList.toArray().length < 6){ if(bFlag){ //目的地----原地方 Transportation(tarList,curList,1); }else{ //原地方----目的地 Transportation(curList,tarList,0); } } } }.start(); } public static void Transportation(ArrayList<Body> cur,ArrayList<Body> tar,int dirFlag){ //方案是否可行 boolean flag = false; Body temp1 = null; Body temp2 = null; if(list.toArray().length == 1){ temp1 = list.get(0); }else if(list.toArray().length == 2){ temp1 = list.get(0); temp2 = list.get(1); } //如果运两个 for(Body b1 : cur){ for(Body b2 : cur){ if(!b2.equals(b1)){ if(temp1 == null){ temp1 = new Body(); temp1.setIndex(-1); } if(temp2 == null){ temp2 = new Body(); temp2.setIndex(-1); } if(!(((temp1.getIndex() == b1.getIndex()) && (temp2.getIndex() == b2.getIndex())) || ((temp2.getIndex() == b1.getIndex()) && (temp1.getIndex() == b2.getIndex())))){ int curBi = 0; //剩下的人得数量 int curGi = 0; //剩下的鬼的数量 for(Body bb : cur){ if(bb.getIndex() == Body.PEOPLE){ curBi ++; }else{ curGi ++; } } if(b1.getIndex() == Body.PEOPLE){ curBi --; }else{ curGi --; } if(b2.getIndex() == Body.PEOPLE){ curBi --; }else{ curGi --; } int tarBi = 0; //剩下的人得数量 int tarGi = 0; //剩下的鬼的数量 for(Body bb : tar){ if(bb.getIndex() == Body.PEOPLE){ tarBi ++; }else{ tarGi ++; } } if(b1.getIndex() == Body.PEOPLE){ tarBi ++; }else{ tarGi ++; } if(b2.getIndex() == Body.PEOPLE){ tarBi ++; }else{ tarGi ++; } //如果河岸两边鬼的数量都小于或等于人的数量,说明方案可行 if((tarGi <= tarBi || tarBi == 0)&& (curGi <= curBi || curBi == 0)){ flag = true; temp1 = b1; temp2 = b2; break; } } } } if(flag){ break; } } if(flag){ tar.add(temp1); tar.add(temp2); cur.remove(temp1); cur.remove(temp2); list.removeAll(list); list.add(temp1); list.add(temp2); showResult(list,dirFlag); if(bFlag){ bFlag = false; }else{ bFlag = true; } }else{ if(temp2 != null){ temp1 = new Body(); temp1.setIndex(-1); } //如果运一个 for(Body b : cur){ if(temp1.getIndex() != b.getIndex()){ int curBi = 0; //剩下的人得数量 int curGi = 0; //剩下的鬼的数量 for(Body bb : cur){ if(bb.getIndex() == Body.PEOPLE){ curBi ++; }else{ curGi ++; } } if(b.getIndex() == Body.PEOPLE){ curBi --; }else{ curGi --; } int tarBi = 0; //剩下的人得数量 int tarGi = 0; //剩下的鬼的数量 for(Body bb : tar){ if(bb.getIndex() == Body.PEOPLE){ tarBi ++; }else{ tarGi ++; } } if(b.getIndex() == Body.PEOPLE){ tarBi ++; }else{ tarGi ++; } //如果河岸两边鬼的数量都小于或等于人的数量,说明方案可行 if((tarGi <= tarBi || tarBi == 0)&& (curGi <= curBi || curBi == 0)){ flag = true; temp1 = b; break; } } } if(flag){ tar.add(temp1); cur.remove(temp1); list.removeAll(list); list.add(temp1); showResult(list,dirFlag); if(bFlag){ bFlag = false; }else{ bFlag = true; } } } } public static void showResult(ArrayList<Body> list,int nflag){ if(nflag == 0){ System.out.println("原地方--->目的地:"); for(Body b : list){ switch(b.getIndex()){ case Body.PEOPLE: System.out.print("人 "); break; case Body.GHOST: System.out.print("鬼 "); break; } } }else if(nflag == 1){ System.out.println("目的地--->向原地方:"); for(Body b : list){ switch(b.getIndex()){ case Body.PEOPLE: System.out.print("人 "); break; case Body.GHOST: System.out.print("鬼 "); break; } } } System.out.println(); } } public class Body { public int index; public static final int PEOPLE = 0; public static final int GHOST = 1; public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } } 输出结果: 原地方--->目的地: 人 ? ? 鬼 ? ?? 目的地--->向原地方: 人 ? ?? 原地方--->目的地: 鬼 ? ? 鬼 ? ?? 目的地--->向原地方: 鬼 ? ?? 原地方--->目的地: 人 ? ? 人 ? ?? 目的地--->向原地方: 鬼 ? ? 人 ? ?? 原地方--->目的地: 人 ? ? 人 ? ?? 目的地--->向原地方: 鬼 ? ?? 原地方--->目的地: 鬼 ? ? 鬼 ? ?? 目的地--->向原地方: 人 ? ?? 原地方--->目的地: 鬼 ? ? 人 ? ?? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- XML :org.xml.sax.SAXParseException: Content is not all
- ios – 有哪些苹果平台允许内联汇编?
- Oracle数据库web维护管理及监控
- 正则表达式(以后遇到字符串的问题,学会利用这个强大的武器
- dwr中的session error问题解决
- Exception: Binary XML file line #7: Error inflating cla
- 我们如何创建一个通用的数组扩展,它与Swift中的Number类型相
- 平安科技加入PostgreSQL分会 推动MongoDB的领域应用
- 安装Oracle Database Express Edition 11g时出现问题
- Oracle认证专家视频教程-OCP全套教程之学习笔记-字符集