和尚和鬼的故事 .
第二個(gè)問題:這回是用船把這三個(gè)僧侶和三個(gè)鬼運(yùn)到河對面,但是千萬要注意,當(dāng)一邊的鬼的數(shù)量多于僧侶,鬼就會吃掉僧侶。比上一題難了點(diǎn),不過還是可以解開的吧!
http://www.chinaren.com/20050330/n224935292.shtml
邏輯處理類 [java] view plain copy print ?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;???????????????????????????????//用于?標(biāo)記船在哪里???false表示在原地方?true表示在目的地 ?? ?????? ????static?ArrayList<Body>?list?=?new?ArrayList<Body>();?? ?????? ????public?static?void?main(String[]?args)?{?? ?????????? ????????//初始化3個(gè)人 ?? ????????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個(gè)鬼 ?? ????????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);?? ????????}?? ?? ????????//如果運(yùn)兩個(gè) ?? ????????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;??????//剩下的人得數(shù)量 ?? ????????????????????????int?curGi?=?0;??????//剩下的鬼的數(shù)量 ?? ?????????????????????????? ????????????????????????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;??????//剩下的人得數(shù)量 ?? ????????????????????????int?tarGi?=?0;??????//剩下的鬼的數(shù)量 ?? ?????????????????????????? ????????????????????????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?++;?? ????????????????????????}?? ?????????????????????????? ????????????????????????//如果河岸兩邊鬼的數(shù)量都小于或等于人的數(shù)量,說明方案可行 ?? ????????????????????????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);?? ????????????}?? ?????????????? ????????????//如果運(yùn)一個(gè) ?? ????????????for(Body?b?:?cur){?? ????????????????if(temp1.getIndex()?!=?b.getIndex()){?? ?????????????????????? ????????????????????int?curBi?=?0;??????//剩下的人得數(shù)量 ?? ????????????????????int?curGi?=?0;??????//剩下的鬼的數(shù)量 ?? ?????????????????????? ????????????????????for(Body?bb?:?cur){?? ????????????????????????if(bb.getIndex()?==?Body.PEOPLE){?? ????????????????????????????curBi?++;?? ????????????????????????}else{?? ????????????????????????????curGi?++;?? ????????????????????????}?? ????????????????????}?? ?????????????????????? ????????????????????if(b.getIndex()?==?Body.PEOPLE){?? ????????????????????????curBi?--;?? ????????????????????}else{?? ????????????????????????curGi?--;?? ????????????????????}?? ?????????????????????? ????????????????????int?tarBi?=?0;??????//剩下的人得數(shù)量 ?? ????????????????????int?tarGi?=?0;??????//剩下的鬼的數(shù)量 ?? ?????????????????????? ????????????????????for(Body?bb?:?tar){?? ????????????????????????if(bb.getIndex()?==?Body.PEOPLE){?? ????????????????????????????tarBi?++;?? ????????????????????????}else{?? ????????????????????????????tarGi?++;?? ????????????????????????}?? ????????????????????}?? ?????????????????????? ????????????????????if(b.getIndex()?==?Body.PEOPLE){?? ????????????????????????tarBi?++;?? ????????????????????}else{?? ????????????????????????tarGi?++;?? ????????????????????}?? ?????????????????????? ????????????????????//如果河岸兩邊鬼的數(shù)量都小于或等于人的數(shù)量,說明方案可行 ?? ????????????????????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();?? ????}?? }?? 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; //用于 標(biāo)記船在哪里 false表示在原地方 true表示在目的地 static ArrayList<Body> list = new ArrayList<Body>(); public static void main(String[] args) { //初始化3個(gè)人 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個(gè)鬼 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); } //如果運(yùn)兩個(gè) 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; //剩下的人得數(shù)量 int curGi = 0; //剩下的鬼的數(shù)量 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; //剩下的人得數(shù)量 int tarGi = 0; //剩下的鬼的數(shù)量 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 ++; } //如果河岸兩邊鬼的數(shù)量都小于或等于人的數(shù)量,說明方案可行 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); } //如果運(yùn)一個(gè) for(Body b : cur){ if(temp1.getIndex() != b.getIndex()){ int curBi = 0; //剩下的人得數(shù)量 int curGi = 0; //剩下的鬼的數(shù)量 for(Body bb : cur){ if(bb.getIndex() == Body.PEOPLE){ curBi ++; }else{ curGi ++; } } if(b.getIndex() == Body.PEOPLE){ curBi --; }else{ curGi --; } int tarBi = 0; //剩下的人得數(shù)量 int tarGi = 0; //剩下的鬼的數(shù)量 for(Body bb : tar){ if(bb.getIndex() == Body.PEOPLE){ tarBi ++; }else{ tarGi ++; } } if(b.getIndex() == Body.PEOPLE){ tarBi ++; }else{ tarGi ++; } //如果河岸兩邊鬼的數(shù)量都小于或等于人的數(shù)量,說明方案可行 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(); } }
[java] view plain copy print ?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;?? ????}?? }?? 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; } }
輸出結(jié)果: 原地方--->目的地:
人 ? ? 鬼 ? ??
目的地--->向原地方:
人 ? ??
原地方--->目的地:
鬼 ? ? 鬼 ? ??
目的地--->向原地方:
鬼 ? ??
原地方--->目的地:
人 ? ? 人 ? ??
目的地--->向原地方:
鬼 ? ? 人 ? ??
原地方--->目的地:
人 ? ? 人 ? ??
目的地--->向原地方:
鬼 ? ??
原地方--->目的地:
鬼 ? ? 鬼 ? ??
目的地--->向原地方:
人 ? ??
原地方--->目的地:
鬼 ? ? 人 ? ??
職場 鬼 休閑 java學(xué)習(xí)
http://www.chinaren.com/20050330/n224935292.shtml
邏輯處理類 [java] view plain copy print ?
[java] view plain copy print ?
輸出結(jié)果: 原地方--->目的地:
人 ? ? 鬼 ? ??
目的地--->向原地方:
人 ? ??
原地方--->目的地:
鬼 ? ? 鬼 ? ??
目的地--->向原地方:
鬼 ? ??
原地方--->目的地:
人 ? ? 人 ? ??
目的地--->向原地方:
鬼 ? ? 人 ? ??
原地方--->目的地:
人 ? ? 人 ? ??
目的地--->向原地方:
鬼 ? ??
原地方--->目的地:
鬼 ? ? 鬼 ? ??
目的地--->向原地方:
人 ? ??
原地方--->目的地:
鬼 ? ? 人 ? ??
職場 鬼 休閑 java學(xué)習(xí)
0
微博 QQ 微信收藏
上一篇:貪吃蛇小游戲 下一篇:人羊菜以及狼的故事 . 彩霞飛飛182篇文章,31W+人氣,0粉絲
轉(zhuǎn)載于:https://blog.51cto.com/caixia/771232
總結(jié)
- 上一篇: 看完后就知道如何提高网站的打开速度,受益
- 下一篇: OpenCV计算图像像素最大值、最小值