「狼羊草过河java」狼羊草过河问题

博主:adminadmin 2023-01-21 17:42:06 310

今天给各位分享狼羊草过河java的知识,其中也会对狼羊草过河问题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

人狼羊草问题

一农夫带着一头狼,一只羊和一担草过河,小船只能一次装载农夫和一样货物,狼会吃羊,羊会吃草,只有农夫在时才安全。现欲让所有物品包括农夫都安全过道河对岸,使用程序实现求解。

使用布尔列表来设置人狼羊草的状态, false代表不过河,true 代表渡河

那么人狼羊草的初始状态就是 status = [ false , false , false , false ]

最后状态应该是 status = [ true , true , true , true ]

1.每次渡河农夫的状态都必须改变

2.每次渡河, 狼 羊 草的状态最多改变一位

3.狼 羊 草 存在食物链克制情况下必须有农夫存在

根据规则以初始状态为根节点,生成后续状态,再做枚举,生成状态树

如果子节点出现与根节点相同的状态,则不再生成子树

1,创建状态历史列表

2.生成所有方案

3.遍历判断所生成方案,判断是否是最终状态,是则输出

4.不是则判断改状态是否存在于状态历史列表

5.是则回到 3 ,继续遍历,不是则存入状态历史列表,回到 2 继续执行

(ps.算法流程图就不画了,凑活看,有人画可以发给我)

判断状态是否合规

创建子树所有状态,也就是下一步农夫行为

树形递归遍历

判断是否达到最终状态,都过河,则返回Ture

最后可以写个方法处理一下列表,打印出过程

农夫过河问题(java)

这个是偶写的 你可以参考下 写的有点多 你自己优化下吧 之前还不知道农夫过河是啥意思 不过后来知道了 如果有问题的话可以马上说的 你的50分偶要定咯!!(可以直接运行)

import java.util.Iterator;

import java.util.LinkedList;

public class AcrossTheRiver {

// 定义三个String对象

public static final String rabbitName = "Rabbit";

public static final String wolfName = "Wolf";

public static final String cabbageName = "Cabbage";

// 判断两个货物之间关系是否友好 写的麻烦了一点= =..

public static boolean isFriendly(Goods goods1, Goods goods2) {

if (goods1 != null) {

if (goods1.getGoodsName().trim().equals(rabbitName)) {

if (goods2 == null) {

return true;

} else {

return false;

}

} else if (goods1.getGoodsName().trim().equals(wolfName)) {

if (goods2 == null || goods2.getGoodsName().trim().equals(cabbageName)) {

return true;

} else {

return false;

}

} else if (goods1.getGoodsName().trim().equals(cabbageName)) {

if (goods2 == null || goods2.getGoodsName().trim().equals(wolfName)) {

return true;

} else {

return false;

}

} else {

return false;

}

} else {

return true;

}

}

// 我就直接写在主方法里了

public static void main(String[] args) {

boolean isSuccess = false;

LinkedListGoods beforeCrossing = new LinkedListGoods();

LinkedListGoods afterCrossing = new LinkedListGoods();

beforeCrossing.add(new Goods(rabbitName));

beforeCrossing.add(new Goods(cabbageName));

beforeCrossing.add(new Goods(wolfName));

while (!isSuccess) {

Goods goods1 = beforeCrossing.getFirst();

System.out.println(goods1.getGoodsName() + " 被取走了");

beforeCrossing.removeFirst();

if (beforeCrossing.isEmpty()) {

afterCrossing.addLast(goods1);

isSuccess = true;

System.out.println("全部移动完毕!");

} else {

IteratorGoods it = beforeCrossing.iterator();

Goods[] beforeCro = new Goods[2];

for (int i = 0; it.hasNext(); i++) {

beforeCro[i] = it.next();

System.out.println(beforeCro[i].getGoodsName() + " 留了下来");

}

if (isFriendly(beforeCro[0], beforeCro[1])) {

if (afterCrossing.isEmpty()) {

afterCrossing.addLast(goods1);

System.out.println(goods1.getGoodsName() + " 被成功的放到了对岸");

} else {

Goods goods2 = afterCrossing.getFirst();

if (isFriendly(goods1, goods2)) {

afterCrossing.addLast(goods1);

System.out.println(goods1.getGoodsName() + " 被成功的放到了对岸");

} else {

beforeCrossing.addLast(goods2);

afterCrossing.removeFirst();

System.out.println(goods1.getGoodsName() + " 与 "

+ goods2.getGoodsName() + "并不和睦 于是把 " + goods2.getGoodsName()

+ "带了回来 并将 " + goods1.getGoodsName() + " 留了下来");

}

}

} else {

beforeCrossing.addLast(goods1);

System.out.println("很可惜 留下来的两个东西并不和睦 于是 " + goods1.getGoodsName()

+ " 又被放了回去");

}

}

}

}

}

// 货物类

class Goods {

// 货物名称

private String goodsName;

// 默认构造方法

public Goods(String goodsName) {

this.goodsName = goodsName;

}

// 获得货物名称

public String getGoodsName() {

return goodsName;

}

}

如何用Java编写三个线程实现狼羊白菜过河问题

开三个线程,一个代表狼,一个代表羊,一个代表白菜。

一艘船。两个位置。

河有两边,

狼跟羊互斥,羊跟白菜互斥。

即他们不能在船不在此岸边的时候同时存在。

狼,羊,白菜的线程去抢船的位置。(船在此岸)(2个位置,去抢吧,抢到了就占个座。。。。)

再开一个线程。。。。OYE~

船判断能不能离岸,不能离就泄空。能就到对岸就把这两个位置上的泄到对岸,船也到对岸。

然后狼,羊,白菜的线程继续去抢船的位置。

船线程继续判能不能离岸。(船上的位置剩余0或1或2时只要2岸不出现互斥,都可以离岸)

能就走,不能就泄空。。。。

如此往复

直到有一天。。。3个都到对岸了。。OK了。。。

谁会要求写出这样没有逻辑的纯靠运气的程序啊。。。

现在的学校真操蛋。。。。

狼羊草过河java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于狼羊草过河问题、狼羊草过河java的信息别忘了在本站进行查找喔。