社区
数据结构与算法
帖子详情
一个比较有难度的题目,怎么用程序解决
abc优希
2010-12-12 10:46:30
过河问题:
有一猎人和一只狼,一个妈妈和她的两个孩子(A和B),一个爸爸和他两个孩子(C和D)要通过一小船过河。
小船一次只能载两个人(狼也算一人),
孩子和狼不能划船,
猎人不在狼伤害所有人,
妈妈们不在爸爸伤害妈妈的孩子,
同样爸爸不在妈妈伤害爸爸的孩子。
...全文
586
25
打赏
收藏
一个比较有难度的题目,怎么用程序解决
过河问题: 有一猎人和一只狼,一个妈妈和她的两个孩子(A和B),一个爸爸和他两个孩子(C和D)要通过一小船过河。 小船一次只能载两个人(狼也算一人), 孩子和狼不能划船, 猎人不在狼伤害所有人, 妈妈们不在爸爸伤害妈妈的孩子, 同样爸爸不在妈妈伤害爸爸的孩子。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
youxuesjszwddr
2011-01-17
打赏
举报
回复
值得学习啊
gonxi
2011-01-11
打赏
举报
回复
遍列一下值空间就可以了
computerlibin
2011-01-10
打赏
举报
回复
人工智能中见过,不过还是不会
abc优希
2011-01-06
打赏
举报
回复
import java.util.Iterator;
import java.util.Stack;
public class River {
private StringBuffer shore = null;
private StringBuffer thither = null;
private String boat = null;
Stack<String> course = new Stack<String>();
private String top = "";
private boolean flag = false;
private River() {
shore = new StringBuffer("MmmFffNW");
thither = new StringBuffer(8);
boat = "";
}
private boolean licit(String bevy) {
if ((bevy.indexOf('W') != -1) && (bevy.length() > 1)) {
if ((bevy.indexOf('N') == -1))
return false;
}
if ((bevy.indexOf('M') != -1) && (bevy.indexOf('f') != -1)) {
if ((bevy.indexOf('F') == -1))
return false;
}
if ((bevy.indexOf('F') != -1) && (bevy.indexOf('m') != -1)) {
if ((bevy.indexOf('M') == -1))
return false;
}
return true;
}
private boolean licitBoat() {
if (1 == boat.length()) {
if ((boat.indexOf('W') != -1) || (boat.indexOf('m') != -1)
|| (boat.indexOf('f') != -1))
return false;
}
if (2 == boat.length()) {
if ((boat.indexOf('N') == -1) && (boat.indexOf('M') == -1)
&& (boat.indexOf('F') == -1))
return false;
}
return licit(boat);
}
private void go() {
int len = boat.length();
char[] c = boat.toCharArray();
int index = -1;
for (int i = 0; i < len; i++) {
index = shore.toString().indexOf(c[i]);
shore.deleteCharAt(index);
}
thither.append(boat);
}
private void come() {
int len = boat.length();
char[] c = boat.toCharArray();
int index = -1;
for (int i = 0; i < len; i++) {
index = thither.toString().indexOf(c[i]);
thither.deleteCharAt(index);
}
shore.append(boat);
}
public boolean doGo() {
go();
if (licit(shore.toString()) && licit(thither.toString()))
return true;
return false;
}
public boolean doCome() {
come();
if (licit(shore.toString()) && licit(thither.toString()))
return true;
return false;
}
public boolean putBoat(String people) {
boat = people;
return licitBoat();
}
public void organiseGo() {
StringBuffer people = new StringBuffer(2);
char c1 = 0, c2 = 0;
boolean canBoat = false;
int start;
for (int i = 0; i < shore.length() - 1; i++)
for (int j = i + 1; j < shore.length(); j++) {
people.delete(0, 2);
c1 = shore.charAt(i);
people.append(c1);
c2 = shore.charAt(j);
people.append(c2);
if(!course.empty())top = course.peek();
if ((top.indexOf(c1) != -1) && (top.indexOf(c2) != -1))
continue;
canBoat = putBoat(people.toString());
if (canBoat) {
course.push(people.toString());
if (doGo()) {
organiseCome();
}
if (flag) {
return;
} else {
shore.insert(i, c1).insert(j, c2);
start = thither.lastIndexOf(course.peek());
thither.delete(start, start + 2);
course.pop();
}
}
}
for (int i = 0; i < shore.length(); i++) {
people.delete(0, 2);
c1 = shore.charAt(i);
people.append(c1);
top = course.peek();
if ((top.indexOf(c1) != -1) && (top.length() == 1))
continue;
canBoat = putBoat(people.toString());
if (canBoat) {
course.push(people.toString());
if (doGo()) {
organiseCome();
}
if (flag) {
return;
} else {
shore.insert(i, c1);
thither.deleteCharAt(thither.length() - 1);
course.pop();
}
}
}
}
public void organiseCome() {
if (shore.length() == 0) {
System.out.println("恭喜您成功过河!输出结果");
Iterator<String> iter = course.iterator();
int i = 1;
while (iter.hasNext()) {
i = i * (-1);
if (-1 == i)
System.out.print(iter.next() + "去-> <-");
else
System.out.println(iter.next() + "回");
}
flag = true;
return;
}
StringBuffer people = new StringBuffer(2);
char c1 = 0, c2 = 0;
boolean canBoat = false;
int start;
for (int i = 0; i < thither.length(); i++) {
people.delete(0, 2);
c1 = thither.charAt(i);
people.append(c1);
top = course.peek();
if ((top.indexOf(c1) != -1) && (top.length() == 1))
continue;
canBoat = putBoat(people.toString());
if (canBoat) {
course.push(people.toString());
if (doCome()) {
organiseGo();
}
if (flag) {
return;
} else {
course.pop();
thither.insert(i, c1);
shore.deleteCharAt(shore.length() - 1);
}
}
}
for (int i = 0; i < thither.length() - 1; i++)
for (int j = i + 1; j < thither.length(); j++) {
people.delete(0, 2);
c1 = thither.charAt(i);
people.append(c1);
c2 = thither.charAt(j);
people.append(c2);
top = course.peek();
if ((top.indexOf(c1) != -1) && (top.indexOf(c2) != -1))
continue;
canBoat = putBoat(people.toString());
if (canBoat) {
course.push(people.toString());
if (doCome()) {
organiseGo();
}
if (flag) {
return;
} else {
thither.insert(i, c1).insert(j, c2);
start = shore.lastIndexOf(course.peek());
shore.delete(start, start + 2);
course.pop();
}
}
}
}
public static void main(String[] args) {
River pr = new River();
pr.organiseGo();
}
}
------------------------------------------------------
恭喜您成功过河!输出结果
NW去-> <-N回
mN去-> <-WN回
Mm去-> <-M回
FM去-> <-F回
WN去-> <-M回
FM去-> <-F回
fF去-> <-WN回
fN去-> <-N回
WN去-> <-
yqyqyoyo
2011-01-06
打赏
举报
回复
问题解决了,把代码贴出来看看····顺便结贴给分。。
abc优希
2011-01-06
打赏
举报
回复
今天终于把问题给解答了
开心
Debugcool
2010-12-15
打赏
举报
回复
猎人、狼、爸爸、妈妈、A、B、C、D一共有8个对象,可以用一个整数的低8bit来表示(1表示有,0表示无),这样河的两岸的状态就可以用两个整数来保存,预处理出来不合法的状态,然后就可以直接广搜就行了,如果要求效率高的话,可以加上启发式什么的,但是这样的状态显然不是很多,至少少于 256 * 256 = 65535,直接广度优先搜索就能瞬秒出结果了。
wizard_tiger
2010-12-15
打赏
举报
回复
如用回溯法可以吗?
lzc52151
2010-12-13
打赏
举报
回复
化成畫,這是一個最短路徑問題
keeya0416
2010-12-13
打赏
举报
回复
[Quote=引用 3 楼 wizard_tiger 的回复:]
一猎人P
一只狼W
一个妈妈M 和她的两个孩子(A和B)
一个爸爸F 和他两个孩子(C和D)
P和W过河P回来;
P和A过河P和W回来;
M和B过河M回来;
M和F过河F回来;
P和W过河M回来;
F和M过河F回来;
F和C过河P和W回来;
P和D过河P回来;
P和W过河;
[/Quote]
原来如此 佩服
NowDoIT
2010-12-13
打赏
举报
回复
这个用程序应该怎么设计?
pmars
2010-12-13
打赏
举报
回复
[Quote=引用 3 楼 wizard_tiger 的回复:]
一猎人P
一只狼W
一个妈妈M 和她的两个孩子(A和B)
一个爸爸F 和他两个孩子(C和D)
P和W过河P回来;
P和A过河P和W回来;
M和B过河M回来;
M和F过河F回来;
P和W过河M回来;
F和M过河F回来;
F和C过河P和W回来;
P和D过河P回来;
P和W过河;
[/Quote]
如此这般,最后两步没想到!
恩,深搜吧,只是限制比较多!限制多,可减的支就多了!
llongfeng2008
2010-12-13
打赏
举报
回复
做过这种游戏,是一种智力题,头一次听说用程序做呢?学习中……
wizard_tiger
2010-12-13
打赏
举报
回复
一猎人P
一只狼W
一个妈妈M 和她的两个孩子(A和B)
一个爸爸F 和他两个孩子(C和D)
P和W过河P回来;
P和A过河P和W回来;
M和B过河M回来;
M和F过河F回来;
P和W过河M回来;
F和M过河F回来;
F和C过河P和W回来;
P和D过河P回来;
P和W过河;
pmars
2010-12-13
打赏
举报
回复
请lz给一下答案吧,他们是如何过河的?
keeya0416
2010-12-13
打赏
举报
回复
这个题目是不是有问题啊
貌似就没解的
逆向思考下
最后一步分 2 种情况
1. 猎人和狼
2. 爸爸和妈妈
如果是2的话,倒数第2步是谁划船回来的? 所以 2 不成立
如果是1的话,那倒数第2步是猎人划船回来的;这样倒数第3步就是猎人带一个小孩过去的;这样倒数第4步是谁划船回来的? 又不成立了
不知我遗漏了什么东西,望楼主解释下
日立奔腾浪潮微软松下联想
2010-12-13
打赏
举报
回复
人工智能的过河问题,A*算法。
flysnowhite
2010-12-13
打赏
举报
回复
状态图,看过程序算法教材上编过狼、人、白菜的算法。
li88yz
2010-12-13
打赏
举报
回复
高手啊,学习了
sjkof
2010-12-13
打赏
举报
回复
状态图的转换,一旦某个状态是非法的,就可以把这一分支减去
加载更多回复(2)
C语言经典
题目
900例
这个是
一个
C语言的900例 涵盖各种算法 。对于练习算法的同学入门和提升还是不错的
计算机二级python真题题库(
题目
+答案)电子版笔记2
本资源包含历年来计算机二级python真题题库(
题目
+答案)电子版笔记1,共15套真题,80道习题及2套练习题。计算机二级python考试的大部分内容都十分基础,可以帮助初学者用来入门Python。考试有40分的单选题、60分的操作题。其中单选题是公共基础题(10分,包括计算机基础、数据结构与算法等相关知识)及Python基础相关的
题目
(30分,包括python基本语法规则、安装方法、第三方库等相关知识)。 最重要的其实就是操作题,操作题就是给定一定的情景环境,让考生编写相应代码。操作题一共有六大题,包括3道基本操作题(各5分)、2道简单应用题(分别10、15分)和一道综合应用题(20分)。其中基本操作提多以填空形式出现较为简单,应用题多考察一些常用函数,综合应用题
难度
较大,需要重点练习一下! 如果有小伙伴刚好想要入门这门语言的话,顺带考个证书会是个不错的选择~
题目
难度
评估方法研究综述
摘要
题目
难度
是保证试卷合理性及考试公平性的关键信息,也是智能教学系统(ITS)中的关键参数,有效支撑着包括智能组卷、
题目
自动生成和个性化习题推荐在内的多项智能教学功能。因此,
题目
难度
评估已成为教育数据挖掘领域的
一个
重要研究方向,拥有大量研究工作。全面回顾了近十年
题目
难度
评估研究领域的研究进展,将
题目
难度
分为
题目
绝对
难度
和
题目
相对
难度
两类,并对现有的
题目
难度
评估方法进行了整理和分类,其中重点分析了基于深度学习的
题目
绝对
难度
预测方法和基于深度学习的
题目
相对
难度
预测方法,并对后者包含的重要方法进行了实验分析。同时
leetcode_problem_rating:评估LeetCode
题目
难度
leetcode_problem_rating:评估LeetCode
题目
难度
项目介绍 在
程序
算法学习领域,LeetCode 无疑是广大开发者、算法爱好者共同学习、交流、成长的平台。但是,如何量化一道
题目
在 LeetCode 中的
难度
,以便更好地规划学习路径和目标呢?leetcode_problem_rating 项目正是为了
解决
这一问题而诞生。 本项目是
一个
前端项目,目前已经在 某代码托管平台 ...
微信小
程序
毕业设计选题:高通过率小
程序
题目
100例
每年一到毕业设计选题就会有大量的同学问,计算机专业毕业设计
题目
、计算机毕业设计选题等相关问题,基于微信小
程序
的选题恰巧是近年来的热门的选题类型,今天主要谈一下计算机相关专业同学的毕业设计思路与技巧。目前移动端的设计则是目前非常流行的选择,其中基于微信小
程序
的设计借助了微信平台,
比较
方便用户随时随地的使用,可以很好的
解决
校内外各类业务场景,同时
题目
可以选择的空间较大,大家可以选来做毕业设计的
题目
。
数据结构与算法
33,027
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章