第一个问题:帮助男人用船把狼、羊、和一箱菜运送到河对面,船一次只能运一样,而且有苛刻的附加条件:当男人不在时,狼会吃羊,羊也会吃卷心菜。移动鼠标,开始解题吧
没玩过的最好玩过再看我的代码,不懂的可以问我,写的比较乱。。。
一个有两个类,这个是主要的处理类
importjava.util.ArrayList;import java.util.ArrayList;
publicclassFlash {
staticBody sheep;
staticBody dish;
staticBody wolf;
staticBody people;
staticBody tarBody;//当前运送的东西
finalstaticArrayList
tarList =newArrayList();finalstaticArrayList
curList =newArrayList();/**
* @param args
*/
publicstaticvoidmain(String[] args) {
//初始化羊
sheep =newBody(Body.SHEEP);
sheep.setnAfraidIndex(Body.WOLF);
sheep.setnLikeIndex(Body.DISH);
//初始化菜
dish =newBody(Body.DISH);
dish.setnAfraidIndex(Body.NONE);
dish.setnLikeIndex(Body.NONE);
//初始化狼
wolf =newBody(Body.WOLF);
wolf.setnAfraidIndex(Body.NONE);
wolf.setnLikeIndex(Body.SHEEP);
//初始化特殊的人
people =newBody(Body.NONE);
people.setnAfraidIndex(Body.NONE);
people.setnLikeIndex(Body.NONE);
curList.add(people);
curList.add(wolf);
curList.add(sheep);
curList.add(dish);
newThread(){
publicvoidrun(){
while(tarList.toArray().length <4){
if(curList.indexOf(people) != -1){
Transportation(tarList,curList,1);
}else{
Transportation(curList,tarList,0);
}
}
}
}.start();
}
publicstaticvoidTransportation(ArrayList
tar,ArrayList cur,intflag){//随即取出一个备选的运送的Body
booleanbFlag =false;
if(!cur.equals(curList)){
booleanbFlag2 =false;
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag2 =true;
break;
}
}
}
if(bFlag2){
break;
}
}
}
if(cur.toArray().length ==2|| bFlag2 ==false){
tar.add(people);
cur.remove(people);
if(flag ==1){
System.out.println("向目的地运送:空");
}else{
System.out.println("向目原来地方运送:空");
}
}else{
for(Body b : cur){
bFlag =false;
if(!b.equals(people)){
if(tarBody ==null){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag =true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}elseif(!tarBody.equals(b)){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag =true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}
if(!bFlag){
String str ="";
switch(b.getIndex()){
caseBody.DISH:
str ="菜";
break;
caseBody.SHEEP:
str ="羊";
break;
caseBody.WOLF:
str ="狼";
break;
}
if(flag ==1){
System.out.println("向目的地运送:"+str);
}else{
System.out.println("向目原来地方运送:"+str);
}
tarBody = b;
tar.add(b);
tar.add(people);
cur.remove(b);
cur.remove(people);
break;
}
}
}
}
}else{
for(Body b : cur){
bFlag =false;
if(!b.equals(people)){
if(tarBody ==null){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag =true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}elseif(!tarBody.equals(b)){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag =true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}
if(!bFlag){
String str ="";
switch(b.getIndex()){
caseBody.DISH:
str ="菜";
break;
caseBody.SHEEP:
str ="羊";
break;
caseBody.WOLF:
str ="狼";
break;
}
if(flag ==1){
System.out.println("向目的地运送:"+str);
}else{
System.out.println("向目原来地方运送:"+str);
}
tarBody = b;
tar.add(b);
tar.add(people);
cur.remove(b);
cur.remove(people);
break;
}
}
}
}
}
}public class Flash {
static Body sheep;
static Body dish;
static Body wolf;
static Body people;
static Body tarBody;//当前运送的东西
final static ArrayList
tarList = new ArrayList();final static ArrayList
curList = new ArrayList();/**
* @param args
*/
public static void main(String[] args) {
//初始化羊
sheep = new Body(Body.SHEEP);
sheep.setnAfraidIndex(Body.WOLF);
sheep.setnLikeIndex(Body.DISH);
//初始化菜
dish = new Body(Body.DISH);
dish.setnAfraidIndex(Body.NONE);
dish.setnLikeIndex(Body.NONE);
//初始化狼
wolf = new Body(Body.WOLF);
wolf.setnAfraidIndex(Body.NONE);
wolf.setnLikeIndex(Body.SHEEP);
//初始化特殊的人
people = new Body(Body.NONE);
people.setnAfraidIndex(Body.NONE);
people.setnLikeIndex(Body.NONE);
curList.add(people);
curList.add(wolf);
curList.add(sheep);
curList.add(dish);
new Thread(){
public void run(){
while(tarList.toArray().length < 4){
if(curList.indexOf(people) != -1){
Transportation(tarList,curList,1);
}else{
Transportation(curList,tarList,0);
}
}
}
}.start();
}
public static void Transportation(ArrayList
tar,ArrayList cur,int flag){//随即取出一个备选的运送的Body
boolean bFlag = false;
if(!cur.equals(curList)){
boolean bFlag2 = false;
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag2 = true;
break;
}
}
}
if(bFlag2){
break;
}
}
}
if(cur.toArray().length == 2 || bFlag2 == false){
tar.add(people);
cur.remove(people);
if(flag == 1){
System.out.println("向目的地运送:空");
}else{
System.out.println("向目原来地方运送:空");
}
}else{
for(Body b : cur){
bFlag = false;
if(!b.equals(people)){
if(tarBody == null){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag = true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}else if(!tarBody.equals(b)){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag = true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}
if(!bFlag){
String str = "";
switch(b.getIndex()){
case Body.DISH:
str = "菜";
break;
case Body.SHEEP:
str = "羊";
break;
case Body.WOLF:
str = "狼";
break;
}
if(flag == 1){
System.out.println("向目的地运送:"+str);
}else{
System.out.println("向目原来地方运送:"+str);
}
tarBody = b;
tar.add(b);
tar.add(people);
cur.remove(b);
cur.remove(people);
break;
}
}
}
}
}else{
for(Body b : cur){
bFlag = false;
if(!b.equals(people)){
if(tarBody == null){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag = true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}else if(!tarBody.equals(b)){
//比较剩下的Body,是否会出现弱者被吃掉的情况
//首先取出一个Body,看下剩下的Body中有没有对自己不利的。。
for(Body bb : cur){
if(!bb.equals(b) && !bb.equals(people)){
for(Body bbb : cur){
if(!bbb.equals(b) && !bbb.equals(people) && !bbb.equals(bb)){
if(bbb.getnLikeIndex() == bb.getIndex() || bbb.getnAfraidIndex() == bb.getIndex()
|| bb.getnAfraidIndex() == bbb.getIndex() || bb.getnLikeIndex() == bbb.getIndex()){
bFlag = true;
break;
}
}
}
if(bFlag){
break;
}
}
}
}
if(!bFlag){
String str = "";
switch(b.getIndex()){
case Body.DISH:
str = "菜";
break;
case Body.SHEEP:
str = "羊";
break;
case Body.WOLF:
str = "狼";
break;
}
if(flag == 1){
System.out.println("向目的地运送:"+str);
}else{
System.out.println("向目原来地方运送:"+str);
}
tarBody = b;
tar.add(b);
tar.add(people);
cur.remove(b);
cur.remove(people);
break;
}
}
}
}
}
}这个是物体类,我把人菜狼和羊归为了物体
publicclassBody {
publicstaticfinalintNONE =0;
publicstaticfinalintSHEEP =1;
publicstaticfinalintDISH =2;
publicstaticfinalintWOLF =3;
privateintindex;
privateintnLikeIndex;
privateintnAfraidIndex;
publicBody(intindex){
this.index = index;
}
publicintgetIndex() {
returnindex;
}
publicvoidsetIndex(intindex) {
this.index = index;
}
publicintgetnLikeIndex() {
returnnLikeIndex;
}
publicvoidsetnLikeIndex(intnLikeIndex) {
this.nLikeIndex = nLikeIndex;
}
publicintgetnAfraidIndex() {
returnnAfraidIndex;
}
publicvoidsetnAfraidIndex(intnAfraidIndex) {
this.nAfraidIndex = nAfraidIndex;
}
}