声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1315|回复: 5

[求助]关于安全渡河问题

[复制链接]
发表于 2006-3-29 10:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
问题:有3个传教士和3个野人乘船过对岸上,船每次只能载二个人,而且当野人人数超过传教士人数时,野人会把传教士吃掉.他们怎样用这条船工安全把所有人渡过河去.要求用matlab程序将过程演示出来...<br>     初学matlab实在有太多不懂啦,希望有那位高手帮帮忙,谢谢!
[此贴子已经被aspen于2006-3-30 9:26:38编辑过]

回复
分享到:

使用道具 举报

发表于 2006-3-29 20:07 | 显示全部楼层

回复:(wang666)急!急!急~~~求教

算法问题,自己去找找吧,现在和matlab无关,先找到算法在问吧
发表于 2006-3-29 21:36 | 显示全部楼层
是啊<BR>[em07]
 楼主| 发表于 2006-3-30 18:01 | 显示全部楼层

急!急!急~~~求教

<P>如果将问题用数字形式表示,如:<BR>初始时为:[3,3,0],结束时为:[3,3,1].即开始时,3个传教士,3个时野人,船在左岸---&gt;后来状态为:3个传教士,3个野人,船在右岸.其中要定义的规则我就不太清楚啦,不知如何将规则表达为数学表达式.请再指点下我啦,谢谢!</P>
发表于 2006-3-30 18:19 | 显示全部楼层

回复:(wang666)[求助]关于安全渡河问题

<P>我这里有一个Mathematica实现的方法<BR>你自己去改成matlab的吧,我没那么多时间<BR><BR>a[1]={0,0}; a[2]={0,1}; a[3]={0,2}; a[4]={0,3}; a[5]={3,0}; <BR>a[6]={3,1}; a[7]={3,2}; a[8]={3,3}; a[9]={1,1}; a[10]={2,2}; <BR>d[1]={0,2}; d[2]={2,0}; d[3]={1,1}; d[4]={0,1}; <BR>d[5]={1,0}; i=1; j=1; k=1; s[0]=s[1]={3, 3};<BR>Print[" 南岸 ---- 船上 ----北岸 "]<BR>Do[<BR>         Do[s[i + 1] = s + (-1)^i*d[j];<BR>                t = 0;<BR>                Do[If[s[i + 1] == a[k], t = 1], {k, 1, 10}];<BR>                  If[t == 0, Continue[]];<BR>         1 == Mod[i + 1, 2]; m = 1; u = 0;<BR>            If[i + 1 &gt;= 3,<BR>            Do[If[s[i + 1] == s[m], u = 1; Break[]], {m, 1, i - 1, 2}]];<BR>            If[u == 0, c[i + 1] = d[j]; Break[]], {j, 1, 5}];<BR>            If[t == 0, Print[No Result]; Break[]];<BR>            b[i + 1] = {3, 3} - s[i + 1];<BR>            Print[s, "----", c[i + 1], "----", b[i + 1]];<BR>If[s[i + 1] == {0, 0}, Break[]], <BR>{i, 1, 12}]</P>
 楼主| 发表于 2006-3-30 18:47 | 显示全部楼层
<P>谢谢啦,你的提示很有用....</P>
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-20 21:27 , Processed in 0.069029 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表