当前位置: 技术问答>java相关
传教士和野人的问题,有兴趣的人试试,给高分
来源: 互联网 发布时间:2015-11-19
本文导语: 声明:这个问题我贴过,还是没解决,很费时间的,有兴趣的人可以试试,高分赠送。 问题描述:有3个野人和3个传教士渡河,现在有一艘小船,最多能容两人,无论是在左岸还是右岸, 如果野人的数目超过传教士...
声明:这个问题我贴过,还是没解决,很费时间的,有兴趣的人可以试试,高分赠送。
问题描述:有3个野人和3个传教士渡河,现在有一艘小船,最多能容两人,无论是在左岸还是右岸,
如果野人的数目超过传教士的数目,野人就会吃掉传教士。问怎样才能安全渡河。(理论上,野人和
传教士的数目是不限的)
提示:
(一)宽度优先算法:
(1)把起始节点放到open表中(如果该起始节点是目标节点,则求的一个解答)
(2)如果open是个空表,则没有解,失败退出;否则继续。
(3)把第一个节点(节点n)从open表移出,并把他放入close的扩展节点表中。
(4)扩展节点n。如果没有后继节点,则转向第(2)步。
(5)把n的所有后继节点放到open表的末端,并提供从这些后继节点回到n的指针。
(6)如果n的任一个后继节点是目标节点,则找到一个解答,成功退出;否则转向第(2)步。
(二)深度优先算法:
(1)把起始节点放到未扩展节点open表中。如果此节点为一目标节点,则得到一个解。
(2)如果open表为一空表,则失败退出。
(3)把第一个节点(节点n)从open表移到close表。
(4)如果节点n的深度等于最大深度,则转向(2)。
(5)扩展节点n,产生其全部后裔,并把他们放入open表的前头。如果没有后裔,则转向(2)。
(6)如果后继节点中有任一个为目标节点,则求的一个解,成功退出;否则,转向(2)。
我的看法:
宽度优先的话,open表是队列,close表是栈。
深度优先的话,open和close都是栈。
我写了一个,实在太差了,不敢拿出来,另一方面,会限制大家的思维,所以不贴代码了。
期待大家用java解决这个问题。
问题描述:有3个野人和3个传教士渡河,现在有一艘小船,最多能容两人,无论是在左岸还是右岸,
如果野人的数目超过传教士的数目,野人就会吃掉传教士。问怎样才能安全渡河。(理论上,野人和
传教士的数目是不限的)
提示:
(一)宽度优先算法:
(1)把起始节点放到open表中(如果该起始节点是目标节点,则求的一个解答)
(2)如果open是个空表,则没有解,失败退出;否则继续。
(3)把第一个节点(节点n)从open表移出,并把他放入close的扩展节点表中。
(4)扩展节点n。如果没有后继节点,则转向第(2)步。
(5)把n的所有后继节点放到open表的末端,并提供从这些后继节点回到n的指针。
(6)如果n的任一个后继节点是目标节点,则找到一个解答,成功退出;否则转向第(2)步。
(二)深度优先算法:
(1)把起始节点放到未扩展节点open表中。如果此节点为一目标节点,则得到一个解。
(2)如果open表为一空表,则失败退出。
(3)把第一个节点(节点n)从open表移到close表。
(4)如果节点n的深度等于最大深度,则转向(2)。
(5)扩展节点n,产生其全部后裔,并把他们放入open表的前头。如果没有后裔,则转向(2)。
(6)如果后继节点中有任一个为目标节点,则求的一个解,成功退出;否则,转向(2)。
我的看法:
宽度优先的话,open表是队列,close表是栈。
深度优先的话,open和close都是栈。
我写了一个,实在太差了,不敢拿出来,另一方面,会限制大家的思维,所以不贴代码了。
期待大家用java解决这个问题。
|
俺大学里用prolog写过
既然用c写出来了,翻译成java不是很easy
既然用c写出来了,翻译成java不是很easy
|
等待回答!!!关注!!!
|
作过游戏没作过最优算法,关注一下