商人过河问题matlab程序

商人过河问题matlab程序
商人过河问题matlab程序

商人过河

functionjueche=guohe

%程序开始需要知道商人和仆人数;

n=input('输入商人数目:');

nn=input('输入仆人数目:');

nnn=input('输入船的最大容量:');

ifnn>n

n=input(''输入商人数目:');

nn=input('输入仆人数目:');

nnn=input('输入船的最大容量:');

end

%决策生成

jc=1;%决策向量放在矩阵d中,jc为插入新元素的行标初始为1;

for i=0:nnn

for j=0:nnn

if(i+j<=nnn)&(i+j>0)%满足条D={(u,v)|1<=u+v<=nnn,u,v=0,1,2}

d(jc,1:3)=[i,j,1];%生成一个决策向量立刻扩充为三维;

d(jc+1,1:3)=[-i,-j,-1];%同时生成他的负向量;

jc=jc+2;%由于生成两个决策向量,则jc要向下移动两个;end end

j=0;

end%状态数组生成

kx=1;%状态向量放在A矩阵中,生成方法同矩阵生成;

for i=n:-1:0

for j=nn:-1:0

if((i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n))%(i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n))为可以存在状态的约束条件

A(kx,1:3)=[i,j,1];%生成状态数组集合D`

A(kx+1,1:3)=[i,j,0];

kx=kx+2;

end

end

j=nn;

end; %将状态向量生成抽象矩阵

k=(1/2)*size(A,1);

CX=zeros(2*k,2*k);

a=size(d,1);

for i=1:2*k

for j=1:a

c=A(i,:)+d(j,:);

x=find((A(:,1)==c(1))&(A(:,2)==c(2))&(A(:,3)==c(3)));

v(i,x)=1;%x为空不会改变v值

end

end%dijstra算法

x=1;y=size(A,1);

m=size(v,1);

T=zeros(m,1);

T=T.^-1;

lmd=T;

P=T;

S=zeros(m,1);

S(x)=1;

P(x)=0;

lmd(x)=0;

k=x;

while(1)

a=find(S==0);

aa=find(S==1);

if size(aa,1)==m

break;

end

for j=1:size(a,1)

pp=a(j,1);

if v(k,pp)~=0

if T(pp)>(P(k)+v(k,pp))

T(pp)=(P(k)+v(k,pp));

lmd(pp)=k;

end

end

end

mi=min(T(a));

if mi==inf

break;

else

d=find(T==mi);

d=d(1);

P(d)=mi;

T(d)=inf;

k=d;

S(d)=1;

end

end

if lmd(y)==inf

jueche='cannotreach'; return;

end

jueche(1)=y;

g=2;h=y;

while(1)

if h==x

break; end

jueche(g)=lmd(h); g=g+1;

h=lmd(h);

end

jueche=A(jueche,:); jueche(:,3)=[];

农夫过河数据结构

郑州轻工业学院 课程设计任务书 题目农夫过河 专业、班级计算机科学与技术 学号姓名 主要内容: 一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸,要把这些东西全部运到北岸。他面前只有一条小船,船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜;否则狼会吃羊,羊会吃白菜。所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不能吃白菜。要求给出农夫将所有的东西运过河的方案。基本要求: 编写求解该问题的算法程序,并用此程序上机运行、调试,屏幕显示结果,能结合程序进行分析。 主要参考资料: 数据结构严蔚敏 完成期限:2012/6/21 指导教师签名: 课程负责人签名: 年月日

郑州轻工业学院 本科 数据结构课程设计总结报告 设计题目:农夫过河 学生姓名: 系别:计算机与通信工程学院 专业:计算机科学与技术 班级:计算机科学与技术 学号: 指导教师: 2012年6 月21 日

一,设计题目 问题描述: 一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸,他要把这些东西全部运到北岸。他面前只有一条小船,船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜;否则狼会吃羊,羊会吃白菜。所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不能吃白菜。要求给出农夫将所有的东西运过河的方案。 二,运行环境(软、硬件环境) VC6.0 Windows7系统 三,算法设计的思想 对于这个问题,我们需要先自动生成图的邻接矩阵来存储,主要方法是先生成各种安全状态结点,存放在顶点向量中;再根据判断两个结点间状态是否可以转换来形成顶点之间的所有边,并把它们保存在邻接矩阵中。在建立了图的邻接矩阵存储结构后,利用递归深度优先搜索求出从顶点(0,0,0,0)到顶点(1,1,1,1)的一条简单路径,这样做只能搜到一种合理方法,因为深度优先搜索遍历一个图的时候每一个结点只能被访问一次。 四,算法的流程图 要写算法的流程图,必须要先很了解自己的函数结构,我先在纸上手动的把整个过程在纸上画一遍,了解它的大体流程,然后把各个函数给分开,下面是我自己根据我的代码中画的各个函数画的流程图,希望老师满意。 主函数的流程图:

商人过河问题

商人过河 一、问题重述和分析 随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。现有4名商人各带一个随从一起渡河一只船只能容纳两个人,但如何乘船渡河的大权掌握在商人的手里,商人怎样安排才能在有限步内安全渡河? 二、模型假设 1、在商人人数多于随从时乘船渡河的大权掌握在商人的手里; 2、商人和随从都会划船; 三.符号说明 x表示商人人数; y表示随从人数; z表示划船到河的此岸与彼岸。 四、模型的建立与求解 本题为多步决策模型,每一次过河都是状态量的转移过程。 此岸四个商人用x=0、1、2、3、4表示,此岸四个随从用y=0、1、2、3、4表示,z=0时表示划船到河的此岸时,z=1时表示划船到河的彼岸时,用有序数对(x,y,z)表示每次转移的状态量。解决此问题就是状态量(4,4,0)转移至(0,0,1),以下就是状态量转移的全部情况(其中“!”表示不能再转移下去或与前面步骤重复): (4,4,0)→(3,3,1) ↓↓ (4,2,1)→(4,3,0)→(4,1,1)→(4,2,0)→(4,0,1)→(4,1,0)→! ↓ (2,2,1) ↓ ! 由以上关系可知,一只船只能容纳两个人的情况下,四名商人各带一个随从无法过河。 此外,如果船的容量增加到3人,那么商人就能以几种方式安全过河,以下

是其中一种方案: (4,4,0)→(4,2,1)→(4,3,0)→(4,1,1,)→(4,2,0)→(2,2,1) ↓ (0,1,1)←(0,3,0)←(0,2,1)←(0,4,0)←(0,3,1)←(3,3,0)↓ (0,2,0)→(0,0,1) 五、模型推广 通过以上模型的建立,若商人和随从人数增加或小船容量加大,考虑n名商人各带一随从的情况。

教案:小船过河问题

小船过河问题 1.渡河时间最少:在河宽、船速一定时,在一般情况下,渡河时间 θ υυsin 1船d d t = = ,显然,当?=90θ时,即船头的指向与河岸垂直,渡河时间最小为 v d ,合运动沿v 的方向进行。 2.位移最小 若水船υυ> 结论船头偏向上游,使得合速度垂直于河岸,位移为河宽,偏离上游的角度为船 水 υυθ= cos 若水船v v <,则不论船的航向如何,总是被水冲向下游,怎样才能使漂下的距 离最短呢?如图所示, 水 船v v = θcos 船头与河岸的夹角应为水 船v v arccos =θ, 船沿河漂下的最短距离为:θ θsin )cos (min 船船水v d v v x ? -= 此时渡河的最短位移:船 水v dv d s == θcos 【例题】河宽d =60m ,水流速度v 1=6m /s ,小船在静水中的速度v 2=3m /s ,问: (1)要使它渡河的时间最短,则小船应如何渡河?最短时间是多少? (2)要使它渡河的航程最短,则小船应如何渡河?最短的航程是多少? v

【例题】在抗洪抢险中,战士驾驶摩托艇救人,假设江岸是平直的,洪水沿江向下游流去,水流速度为v 1,摩托艇在静水中的航速为v 2,战士救人的地点A 离岸边最近处O 的距离为d ,如战士想在最短时间内将人送上岸,则摩托艇登陆的地点离O 点的距离为( ) A . 21 222 υ υυ-d B .0 C . 2 1 υυd D . 1 2 υυd 【例题】某人横渡一河流,船划行速度和水流动速度一定,此人过河最短时间为了T 1;若此船用最短的位移过河,则需时间为T 2,若船速大于水速,则船速与水速之比为( ) (A) 2 1222T T T - (B) 1 2 T T (C) 2 2211T T T - (D) 2 1 T T 【例题】小河宽为d ,河水中各点水流速度大小与各点到较近河岸边的距离成正比,d v k kx v 0 4= =,水,x 是各点到近岸的距离,小船船头垂直河岸渡河,小船划水速度为0v ,则下列说法中正确的是( ) A 、小船渡河的轨迹为曲线 B 、小船到达离河岸 2 d 处,船渡河的速度为02v C 、小船渡河时的轨迹为直线 D 、小船到达离河岸4/3d 处,船的渡河速度为010v 【练习】 1.有一条河宽100m ,当水流为3m/s 时,船速为4m/s ,画图说明能否到达正对岸,若能,按运动的合成分解来分析以下问题 (1)合速度多大?方向如何(画图) (2)由分运动和合运动同时性分析,当到达对岸时,过河时间为多少?

商人过河问题

商人过河问题 /*************************************************** *M个商人与每人各带的一个仆人过河问题 *船每次至多运N个人,至少要有一人划船 *在任一岸,当商人数<仆人数时,仆人就杀人越货 *过河由商人安排运送人员及数目 *找出安全渡河的全部方法并打印(原问题中M=3,N=2) *2010-10-10 20时许(纪念伟大的双十) * LYP ***************************************************/ /****************************************************************** *本题为多步决策 *若考虑只针对人数为 M = 3 对,每次过河人数最多 N = 2 *可以证明路径中必须经坐标中(3,1)过至(1,1)点(过诃时), *后返回至(2,2)点,再过诃至(0,2)点(只剩2个仆人) *可以先考虑(3,3)到(3,1)点 *再经(0,2)至(0,0),完成过诃(由图形的对称性关系,可以直接将(3,1)至(3,1)路径翻转,更改对应标号即可) *当然也可以用动态规划求解 *本代码不限定M,N值,可通过修改宏M,N的值,求其他商人(仆人)数与最大过河人数的全部路径 *******************************************************************/ /********************************************************************* * *商人数x < 仆人数y时遭杀人越货,过河失败 *对应可行域为: *x = 0, y = 0…M; elements[]中编号0…M *0 < x < M, y = x; elements[]中编号M+1…2M-1 *x = M, y = 0…M; elements[]中编号2M…3M *图像上表示如下:(共 3*M+1 个点),过河即从3M点到0点 *过河为左下方1/4圆区域 *返回为右上方1/4圆区域

农夫过河问题状态图及程序

农夫过河问题状态图及程序 一、问题需求分析 一个农夫带着一只狼、一只羊和一棵白菜,身处河的南岸。他要把这些东西全部运到北岸。问题是他面前只有一条小船,船小到只能容下他和一件物品,另外只有农夫能撑船。另外,因为狼能吃羊,而羊爱吃白菜,所以农夫不能留下羊和白菜或者狼和羊单独在河的一边,自己离开。请问农夫该采取什么方案才能将所有的东西运过河呢? 二、算法选择 求解这个问题的最简单的方法是一步一步进行试探,每一步都搜索所有可能的选择,对前一步合适的选择再考虑下一步的各种方案。 用计算机实现上述求解的搜索过程可以采用两种不同的策略:一种是广度优先(breadth_first) 搜索,另一种是深度优先(depth_first) 。 广度优先: u 广度优先的含义就是在搜索过程中总是首先搜索下面一步的所有可能状态,然后再进一步考虑更后面的各种情况。u 要实现广度优先搜索,一般都采用队列作为辅助结构。把下一步所有可能达到的状态都列举出来,放在这个队列中,

然后顺序取出来分别进行处理,处理过程中把再下一步的状态放在队列里……。 u 由于队列的操作遵循先进先出的原则,在这个处理过程中,只有在前一步的所有情况都处理完后,才能开始后面一步各情况的处理。 三、算法的精化 要模拟农夫过河问题,首先需要选择一个对问题中每个角色的位置进行描述的方法。一个很方便的办法是用四位二进制数顺序分别表示农夫、狼、白菜和羊的位置。例如用0表示农夫或者某东西在河的南岸,1表示在河的北岸。因此整数5(其二进制表示为0101) 表示农夫和白菜在河的南岸,而狼和羊在北岸。 四、算法的实现 完成了上面的准备工作,现在的问题变成: 从初始状态二进制0000(全部在河的南岸) 出发,寻找一种全部由安全状态构成的状态序列,它以二进制1111(全部到达河的北岸) 为最终目标,并且在序列中的每一个状态都可以从前一状态通过农夫(可以带一样东西)划船过河的动作到达。

高中物理小船过河问题含答案

小船过河问题 轮船渡河问题: (1)处理方法:轮船渡河是典型的运动的合成与分解问题,小船在有一定流速的水中过河时,实际上参与了两个方向的分运动,即随水流的运动(水冲船的运动)和船相对水的运动(即在静水中的船的运动),船的实际运动是合运动。 1.渡河时间最少:在河宽、船速一定时,在一般情况下,渡河时间 θ υυsin 1 船d d t = = ,显然,当?=90θ时,即船头的指向与河岸垂直,渡河时间最小 为 v d ,合运动沿v 的方向进行。 2.位移最小 若水船υυ> 结论船头偏向上游,使得合速度垂直于河岸,位移为河宽,偏离上游的角度为船 水 υυθ= cos 若水船v v <,则不论船的航向如何,总是被水冲向下游,怎样才能使漂下的距离最短呢?如图所示, 设船头v 船与河岸成θ角。合速度v 与河岸成α角。可以看出:α角越大,船漂下的距离x 越短,那么,在什么条件下α角最大呢?以v 水的矢尖为圆心,v 船为半径画圆,当v 与圆相切时,α角最大,根据水 船v v = θcos 船头与河岸的夹角应为 2

水 船v v arccos =θ,船沿河漂下的最短距离为: θ θsin )cos (min 船船水v d v v x ? -= 此时渡河的最短位移:船 水v dv d s = =θcos 【例题】河宽d =60m ,水流速度v 1=6m /s ,小船在静水中的速度v 2=3m /s ,问: (1)要使它渡河的时间最短,则小船应如何渡河?最短时间是多少? (2)要使它渡河的航程最短,则小船应如何渡河?最短的航程是多少? ★解析: (1)要使小船渡河时间最短,则小船船头应垂直河岸渡河,渡河的最短时间 s s d t 2030 60 2 == = υ (2)渡河航程最短有两种情况: ①船速v 2大于水流速度v 1时,即v 2>v 1时,合速度v 与河岸垂直时,最短航程就是河宽; ②船速v 2小于水流速度v l 时,即v 2

商人过河问题数学建模修订稿

商人过河问题数学建模 WEIHUA system office room 【WEIHUA 16H-WEIHUA WEIHUA8Q8-

作业1、2: 商人过河 一、问题重述 问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。乘船渡河的方案由商人决定。商人们怎样才能安全过河? 问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。 二、问题分析 问题可以看做一个多步决策过程。每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。 三.问题假设 1. 过河途中不会出现不可抗力的自然因素。 2. 当随从人数大于商人数时,随从们不会改变杀人的计划。 3.船的质量很好,在多次满载的情况下也能正常运作。 4. 随从会听从商人的调度。 四、模型构成 x(k)~第k次渡河前此岸的商人数 x(k),y(k)=0,1,2,3,4; y(k)~第k次渡河前此岸的随从数 k=1,2,…..

s(k)=[ x(k), y(k)]~过程的状态 S~允许状态集合 S={(x,y) x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3} u(k)~第k 次渡船上的商人数 u(k), v(k)=0,1,2; v(k)~ 第k 次渡船上的随从数 k=1,2….. d(k)=( u(k), v(k))~过程的决策 D~允许决策集合 D={u,vu+v=1,2,u,v=0,1,2} 状态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~状态转移律 求d(k) D(k=1,2,….n),使s(k) S 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0) 数学模型: k+1k S =S +k k D (-1) (1) '4k k x x += (2) '4k k y y += (3) k.k x y ≥ (4) ''k k x y ≥ (5)

C# 关于农夫过河的问题

课程设计第五题 1.题目探讨农夫过河的问题 2.设计思路 (1)农夫由A到B的情况 (1)带走一个动物后,另外的两个物是不是可以相吃 (2)会不会把刚带回来的又带到对岸去 (3)最后一次带的情况比较的特殊,判断最后一次走后是不是所有的都不在了对岸 (2)农夫从B到A的情况 (1)对岸是不是只有一个物体 (2)对岸是不是有两个物体,若是有两个物体的话他们的处理方式不一样,1。两个物体会相克的,则把羊带走,2如果不是的话那么农夫就空着手回去。 3.应该注意的问题 (1)。在最后的一次带走羊的时候,应该加如一个新的判段 (2)。以及在带回羊的时候,我们要对其进行一个标记,不然的话我们就很容易进行死循环里面 (3)以及每一次从A带东西去B的时候,我们都要对他的位置进行标记下 4.咸受 在对一个问题分析的时候,我们应该先把每一种情况给分析出来,要把问题分析得分面一些,最好是不要落下任何的一种情况,这样我们就可以对每一种情况编写相应的代码了。5.源代码 static int sum(int[] a) { int sum = 0; for (int i = 0; i < a.Length; i++) { sum = sum + a[i]; } return sum; } static void Main(string[] args) { string[] wu = new string[4] { "农夫", "狼", "羊", "白菜" }; int[] a = new int[4] { 3, 1, -1, 1 }; int[] b = new int[4] { 0, 0, 0, 0 }; Console.WriteLine(" 关于农夫过河的问题"); int weizhi = 0; do { if (a[0] == 3) {

小船渡河问题(含知识点、例题和练习)

小船渡河问题 小船渡河的问题,可以分解为它同时参与的两个分运动,一是小船相对水的运动(设水不流时船的运动,即在静水中的运动),一是随水流的运动(即水冲船的运动,等于水流的运动),船的实际运动为合运动. 两种情况:①船速大于水速;②船速小于水速。 两种极值:①渡河最小位移;②渡河最短时间。 【例1】一条宽度为L 的河,水流速度为水 v ,已知船在静水中速度为 船 v ,那么: (1)怎样渡河时间最短 (2)若水船v v >,怎样渡河位移最小 (3)若 水 船v v <,怎样渡河位移最小,船漂下的距离最短 解析:(1)小船过河问题,可以把小船的渡河运动分解为它同时参与的两个运动,一是小船运动,一是水流的运动,船的实际运动为合运动。如右图所示,船头与河岸垂直渡河,渡河时间最短:船 v L t = min 。 此时,实际速度(合速度)2 2 水船合v v v += 实际位移(合位移)船 水船v v v L L 2 2 sin s +=?= (2)如右图所示,渡河的最小位移即河的宽度。为使渡河位移等于L ,必须使船的合速度v 合的方向与河岸垂直,即使沿河岸方向的速度分量等于0。这时船头应指向河的上游,并与河岸成一定的角度θ,所以有水船v v =θcos ,即 船水 v v arccos =θ。因为θ为锐角,1cos 0<<θ,所以只有在 水船v v >时,船头与河岸上游的夹角船 水v v arccos =θ,船才有可 能垂直河岸渡河,此时最短位移为河宽,即L s =min 。实际速度(合速度)θsin 船合v v =,V 船 V 水 V 合

运动时间θ sin 船合v L v L t == (3)若水船v v <,则不论船的航向如何,总是被水冲向下游,怎样才能使漂下的距离最短呢 如右图所示,设船头v 船与河岸成θ角。合速度v 合与河岸成α角。可以看出:α角越大,船漂下的距离x 越短,那么, 在什么条件下α角最大呢以v 水的矢尖为圆心,v 船为半径画圆,当v 合与圆相切时,α角最大,根据水 船v v = θcos ,船头与河岸的夹角应为水 船v v arccos =θ,此时渡河的最短位移: 船 水v Lv L s == θcos 渡河时间:θ sin 船v L t = , 船沿河漂下的最短距离为:θ θsin )cos (min 船船水v L v v x ? -= 误区:不分条件,认为船位移最小一定是垂直到达对岸;将渡河时间最短与渡河位移最小对应。 【练习1】小河宽为d ,河水中各点水流速度大小与各点到较近河岸边的距离成正比, d v k kx v 0 4= =,水,x 是各点到近岸的距离,小船船头垂直河岸渡河,小船划水速度为0v ,则下列说法中正确的是( ) A. 小船渡河的轨迹为曲线 B. 小船到达离河岸 2 d 处,船渡河的速度为02v C. 小船渡河时的轨迹为直线

部编版2020年高考物理一轮复习 专题4.1 小船过河问题千题精练

专题4.1 小船过河问题 一.选择题 H的A、B两个码头同时1. (2018安徽合肥三模)如图所示,在宽为H的河流中,甲、乙两船从相距 3 开始渡河,船头与河岸均成60°角,两船在静水中的速度大小相等,且乙船恰能沿BC到达正对岸的C。则下列说法正确的是 A. 两船不会相遇 B. 两船在C点相遇 C. 两船在AC的中点相遇 D. 两船在BC的中点相遇 【参考答案】D 【命题意图】本题考查小船过河、运动的合成与分解及其相关的知识点。 【解后反思】若A、B两个码头之间距离为,则此题正确选项上哪一个?若A、B两个码头之间距离 大于2 ,则此题正确选项上哪一个?若甲船在静水中的速度大于乙船,则两船哪一个先到达和对岸? 3 还能够相遇吗?若甲船在静水中的速度小于乙船,则两船哪一个先到达和对岸?还能够相遇吗? 2.一小船在静水中的速度为3 m/s,它在一条河宽为150 m,水流速度为4 m/s的河流中渡河,则该小船( )

A .能到达正对岸 B .渡河的时间可能少于50 s C .以最短时间渡河时,它沿水流方向的位移大小为200 m D .以最短位移渡河时,位移大小为150 m 【参考答案】C 3.如图所示,河的宽度为L ,河水流速为v 水,甲、乙两船均以静水中的速度v 同时渡河。出发时两船相距2L ,甲、乙船头均与岸边成60°角,且乙船恰好能直达正对岸的A 点。则下列判断正确的是( ) A .甲船正好也在A 点靠岸 B .甲船在A 点左侧靠岸 C .甲、乙两船可能在未到达对岸前相遇 D .甲、乙两船到达对岸的时间相等 【参考答案】BD 【名师解析】甲、乙两船垂直河岸的速度相等,渡河时间为t = L v sin60° ,乙能垂直于河岸渡河,对乙船则 有v 水=v cos60°,可得甲船在该时间内沿水流方向的位移为(v cos60°+v 水) L v sin60°=2 3 3L <2L ,甲船在 A 点左侧靠岸,甲、乙两船不能相遇。综上所述,A 、C 错误, B 、D 正确。 3.(2018湖北咸宁期中联考)如图所示,小船以大小为v (小船在静水中的速度)、方向与上游河岸成θ的速度从O 处过河,经过一段时间,正好到达正对岸的O ’处,现要使小船在更短的时间内过河并且也正好到达正对岸O ’处。在水流速度不变的情况下,可采取的方法是 A .θ角不变且v 增大

商人过河问题matlab程序

商人过河functionjueche=guohe %程序开始需要知道商人和仆人数; n=input(' 输入商人数目:'); nn=input(' 输入仆人数目:'); nnn=input(' 输入船的最大容量:'); ifnn>n n=input('' 输入商人数目:'); nn=input(' 输入仆人数目:'); nnn=input(' 输入船的最大容量:'); end %决策生成 jc=1;% 决策向量放在矩阵 d 中,jc 为插入新元素的行标初始为 1 ; for i=0:nnn for j=0:nnn if(i+j<=nnn)&(i+j>0)% 满足条D={(u,v) |1<=u+v<=nnn,u,v=0,1,2} d( jc,1:3)=[i,j ,1] ;%生成一个决策向量立刻扩充为三维; d( jc+1,1:3)=[-i,-j,-1];% 同时生成他的负向量; jc=jc+2;% 由于生成两个决策向量,则jc 要向下移动两个;end end j=0; end% 状态数组生成

kx=1;% 状态向量放在 A 矩阵中,生成方法同矩阵生成; for i=n:-1:0 for j=nn:-1:0 if((i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n))%(i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n ))为可以存在状态的约束条件 A(kx,1:3)=[i,j,1];% 生成状态数组集合D' A(kx+1,1:3)=[i,j,0]; kx=kx+2; end end j=nn; end; % 将状态向量生成抽象矩阵 k=(1/2)*size(A,1); CX=zeros(2*k,2*k); a=size(d,1); for i=1:2*k for j=1:a c=A(i,:)+d( j,:); x=find((A(:,1)==c(1))&(A(:,2)==c(2))&(A(:,3)==c(3)));

高中物理专题小船过河问题

小船过河问题 问题本质 小船渡河是典型的运动的合成问题。需要理解运动的独立性和等时性原理,掌握合速度与分速度之间的关系。小船在有一定流速的水中过河时,实际上参与了两个方向的分运动,即随水流的运动v 水(水冲船的运动),和船相对水的运动v 船(即在静水中的船的运动),船的实际运动v 是合运动。 基本模型 1、v 水v 船 不论船的航向如何,总是被水冲向下游,即无论向哪个方向划船都不能使船头垂直于河,只能尽量使船头不那么斜。那么怎 样才能使漂下的距离 最短呢?如图 例1.小船在s=200 m 宽的河中横渡,水流速度是2 m/s,船在静水中的航行速度为4 m/s.求: (1)小船渡河的最短时间. (2)要使小船航程最短,应该如何航行? 例2.河宽d =60m ,水流速度v 1=6m /s ,小船在静水中的速度v 2=3m /s ,问: (1)要使它渡河的时间最短,则小船应如何渡河?最短时间是多少? (2)要使它渡河的航程最短,则小船应如何渡河?最短的航程是多少? 例3.玻璃生产线上,宽24 m 的成型玻璃板以6 m/s 的速度连续不断地向前行进,在切割工序处,金刚钻的走刀速度为10 m/s.为了使割下的玻璃板都成规定尺寸的矩形,金刚钻割刀的轨道应如何控制?切割一次的时间多长? 同步练习: 1.某人以不变的速度垂直对岸游去,游到中间,水流速度加大,则此人渡河时间比预定时间 A .增加 B .减少 C .不变 D .无法确定 2.某人以一定速度始终垂直河岸向对岸游去,当河水匀速流动时,他所游过的路程,过河所用的时间与水速的关系是( ) A .水速大时,路程长,时间长 B .水速大时,路程长,时间短 C .水速大时,路程长,时间不变 D .路程、时间与水速无关 3.如图所示,A 、B 为两游泳运动员隔着水流湍急的河流站在两岸边,A 在较下游的位置,且A 的游泳成绩比B 好,现让两人同时下水游泳,要求两人尽快在河中相遇,试问应采用下列哪种方法才能实现( ) A. A 、B 均向对方游(即沿虚线方向)而不考虑水流作用 B. B 沿虚线向A 游且A 沿虚线偏向上游方向游 C. A 沿虚线向B 游且B 沿虚线偏向上游方向游 D. 都应沿虚线偏向下游方向,且B 比A 更偏向下游 4.在抗洪抢险中,战士驾驶摩托艇救人,假设江岸是平直的,洪水沿江向下游流去,水流速度为v 1,摩托艇在静水中的航速为v 2,战士救人的地点A 离岸边最近处O 的距离为d ,如战士想在最短时间内将人送上岸,则摩托艇登陆的地点离O 点的距离为( ) A . 2 1222υυυ-d B .0 C .21 υυd D .12 υυd 5.某人横渡一河流,船划行速度和水流动速度一定,此人过河最短时间为了T 1;若此船用最短的位移过河,则需时间为T 2,若船速大于水速,则船速1v 与

小船渡河专题训练(含答案详解)

小船渡河专题训练卷 1.如图所示,河的宽度为d ,船渡河时船头始终垂直河岸.船在静水中的速度大小为v 1,河水流速的大小为v 2,则船渡河所用时间为( ) A . 1d v B .2 d v C . 12d v v + D 2.河宽420 m ,船在静水中速度为4 m /s ,水流速度是3 m /s ,则船过河的最短时间为( ) A .140 s B .105 s C .84 s D .760 s 3.小船在静水中的航行速度为1m/s ,水流速度为2m/s ,为了在最短距离内渡河,则小船船头指向应为(图中任意方向间的夹角以及与河岸间的夹角均为300)( ) A .a 方向 B .b 方向 C .c 方向 D .e 方向 4.小船在静水中的速度是v ,今小船要渡过一河流,渡河时小船朝对岸垂直划行,若航行至河中心时,河水流速增大,则渡河时间将( ) A. 不变 B.减小 C.增大 D.不能确定 5.一条河宽为d ,河水流速为1v ,小船在静水中的速度为2v ,要使小船在渡河过程中所行 路程S 最短,则( ) A .当1v >2v 时, B .当1v <2v 时, C .当1v >2v 时,.当2v <1v ,6.一小船在静水的速度为3m/s ,它在一条河宽150m ,水流速度为4m/s 的河流中渡河,则 该小船( ) A .能到达正对岸 B .渡河的时间可能少于50s C .以最短时间渡河时,它沿水流方向的位移大小为200m D .以最短位移渡河时,位移大小为150m 7.某船在静水中的速率为4m/s, 要横渡宽为40m 的河, 河水的流速为5m/s 、 下列说法中不

小船过河问题的总结

曲线运动习题课 一、船过河模型 1、处理方法:小船在有一定流速的水中过河时,实际上参与了两个方向的分运动,即随水流的运动(水冲船的运动)和船相对水的运动,即在静水中的船的运动(就是船头指向的方向),船的实际运动是合运动。 2、若小船要垂直于河岸过河,过河路径最短,应将船头偏向上游,如图甲所示,此时过河时间: 3、若使小船过河的时间最短,应使船头正对河岸行驶,如图乙所示,此时过河时间(d为河宽)。因为在垂直于河岸方向上,位移是一定的,船头按这样的方向,在垂直于河岸方向上的速度最大。 二、绳端问题(绳子末端速度分解) 绳子末端运动速度的分解,按运动的实际效果进行可以方便我们的研究。 例如在右图中,用绳子通过定滑轮拉物体船,当以速度v匀速拉绳子时,求船的速度。 解析:船的运动(即绳的末端的运动)可看作两个分运动的合成: a)沿绳的方向被牵引,绳长缩短,绳长缩短的速度等于左端绳子伸长的速度。即为v; b)垂直于绳以定滑轮为圆心的摆动,它不改变绳长。这样就可以求得船的速度为, 当船向左移动,α将逐渐变大,船速逐渐变大。虽然匀速拉绳子,但物体A却在做变速运动。 绳子末端速度的分解问题,是本章的一个难点,同学们在分解时,往往搞不清哪一个是合速度,哪一个是分速度。以至解题失败。下面结合例题讨论一下。例1、如图1所示,在河岸上利用定滑轮拉绳索使小船靠岸,拉绳速度大小为v1,当船头的绳索与水平面夹角为θ时,船的速度多大 解析我们所研究的运动合成问题,都是同一物体同时参与的两个分运动的合成问题,而物体相对于给定参照物(一般为地面)的实际运动是合运动,实际运动的方向就是合运动的方向。本例中,船的实际运动是水平运动,它产生的实际效果可以A点为例说明:一是A点沿绳的收缩方向的运动,二是A点绕O点沿顺时针方向的转动,所以,船的实际速度v可分解为船沿绳方向的速度v1和垂直于绳的速度v2,如图1所示。由图可知:v=v1/cosθ 点评不论是力的分解还是速度的分解,都要按照它的实际效果进行。本例中,若将拉绳的速度分解为水平方向和竖直方向的分速度,就没有实际意义了,因为船并不存在竖直方向上的分运动 例2 如图2所示,一辆匀速行驶的汽车将一重物提起,在此过程中,重物A 的运动情况是【】 A. 加速上升,且加速度不断增大 B. 加速上升,且加速度不断减小 C. 减速上升,且加速度不断减小 D. 匀速上升 解析物体A的速率即为左段绳子上移的速率,而左段绳子上移的速率与右段绳子在沿着绳长方向的分速率是相等的。右段绳子实际上同时参与两个运动:沿绳方向拉长及向上摆动。将右段绳子与汽车相连的端点的运动速度v沿绳子方向

商人过河问题数学建模

作业1、2: 商人过河 一、问题重述 问题一:4个商人带着4个随从过河,过河的工具只有一艘小船,只能同时载两个人过河,包括划船的人。随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货。乘船渡河的方案由商人决定。商人们怎样才能安全过河? 问题二:假如小船可以容3人,请问最多可以有几名商人各带一名随从安全过河。 二、问题分析 问题可以看做一个多步决策过程。每一步由此岸到彼岸或彼岸到此岸船上的人员在安全的前提下(两岸的随从数不比商人多),经有限步使全体人员过河。用状态变量表示某一岸的人员状况,决策变量表示船上的人员情况,可以找出状态随决策变化的规律。问题就转换为在状态的允许变化范围内(即安全渡河条件),确定每一步的决策,达到安全渡河的目标。 三.问题假设 1. 过河途中不会出现不可抗力的自然因素。 2. 当随从人数大于商人数时,随从们不会改变杀人的计划。 3.船的质量很好,在多次满载的情况下也能正常运作。 4. 随从会听从商人的调度。 四、模型构成 x(k)~第k次渡河前此岸的商人数x(k),y(k)=0,1,2,3,4; y(k)~第k次渡河前此岸的随从数k=1,2,….. s(k)=[ x(k), y(k)]~过程的状态S~允许状态集合 S={(x,y) x=0,y=0,1,2,3,4; x=4,y=0,1,2,3,4;x=y=1,2,3} u(k)~第k次渡船上的商人数u(k), v(k)=0,1,2; v(k)~ 第k次渡船上的随从数k=1,2…..

d(k)=( u(k), v(k))~过程的决策 D~允许决策集合 D={u,v |u+v=1,2,u,v=0,1,2} 状态因决策而改变s(k+1)=s(k)+(-1)^k*d(k)~状态转移律 求d(k) ∈D(k=1,2,….n),使s(k) ∈S 并按转移律s(k+1)=s(k)+(-1)^k*d(k)由(4,4)到达(0,0) 数学模型: k+1k S =S +k k D (-1) (1) '4k k x x += (2) '4k k y y += (3) k.k x y ≥ (4) ''k k x y ≥ (5) 模型分析: 由(2)(3)(5)可得 44k k x y -≥- 化简得 k k x y ≤

农夫过河问题

课程设计题目:农夫过河 一.问题描述 一个农夫带着一只狼、一只羊和一箩白菜,身处河的南岸。他要把这些东西全部运到北岸。他面前只有一条小船,船只能容下他和一件物品,另外只有农夫才能撑船。过河有以下规则: (1)农夫一次最多能带一样东西(或者是狼、或者是羊、或者是白菜)过河; (2)当农夫不在场是狼会吃羊; (3)当农夫不在场是羊会吃掉白菜。 现在要求为农夫想一个方案,能将3样东西顺利地带过河。从出事状态开始,农夫将羊带过河,然后农夫将羊待会来也是符合规则的,然后农夫将羊带过河仍然是符合规则的,但是如此这般往返,搜索过程便进入了死循环,因此,在这里,采用改进的搜索算法进行搜索。 二.基本要求 (1)为农夫过河问题抽象数据类型,体会数据模型在问题求解中的重要性; (2)要求利用数据结构的方法以及C++的编程思想来完成问题的综合设 计; (3)在问题的设计中,使用深度优先遍历搜索方式,避免死循环状态; (4)设计一个算法求解农夫过河问题,并输出过河方案; (5)分析算法的时间复杂度。 三.概要设计 (1)数据结构的设计 typedef struct // 图的顶点 { int farmer; // 农夫 int wolf; // 狼 int sheep; // 羊 int veget; // 白菜 }Vertex;

设计Vertex结构体的目的是为了存储农夫、狼、羊、白菜的信息,因为在遍历图的时候,他们的位置信息会发生变化,例如1111说明他们都在河的北岸,而0000说明他们都在河的南岸。 t ypedef struct { int vertexNum; // 图的当前顶点数 Vertex vertex[VertexNum]; // 顶点向量(代表顶点) bool Edge[VertexNum][VertexNum]; // 邻接矩阵. 用于存储图中的边,其矩阵元素个数取决于顶点个数,与边数无关 }AdjGraph; // 定义图的邻接矩阵存储结构 存储图的方法是用邻接矩阵,所以设计一个简单的AdjGraph结构体是为了储图的顶点数与边数,农夫过河问题我采用的是图的深度优先遍历思想。 (2)算法的设计 深度优先遍历基本设计思想:设x是当前被访问顶点,在对x做过访问标记后,选择一条从x出发的未检测过的1/12边(x,y)。若发现顶点y已访问过,则重新选择另一条从x出发的未检测过的边,否则沿边(x,y)到达未曾访问过的y,对y访问并将其标记为已访问过;然后从y开始搜索,直到搜索完从y出发的所有路径,即访问完所有从y出发可达的顶点之后,才回溯到顶点x,并且再选择一条从x出发的未检测过的边。上述过程直至从x出发的所有边都已检测过为止。此时,若x不是源点,则回溯到在x之前被访问过的顶点;否则图中所有和源点有路径相通的顶点(即从源点可达的所有顶点)都已被访问过,若图G是连通图,则遍历过程结束,否则继续选择一个尚未被访问的顶点作为新源点,进行新的搜索过程。 程序中的深度优先遍历算法如下: void dfsPath(AdjGraph *graph, int start, int end) // 深度优先搜索从u到v的简单路径 //DFS--Depth First Search { int i = 0; visited[start] = true; //标记已访问过的顶点 if (start == end)

(完整版)小船渡河问题练习题大全

小船过河问题| 1河宽d =60m ,水流速度v 1=6m /s ,小船在静水中的速度v 2=3m /s ,问: (1)要使它渡河的时间最短,则小船应如何渡河?最短时间是多少? (2)要使它渡河的航程最短,则小船应如何渡河?最短的航程是多少? 2在抗洪抢险中,战士驾驶摩托艇救人,假设江岸是平直的,洪水沿江向下游流去,水流速度为v 1,摩托艇在静水中的航速为v 2,战士救人的地点A 离岸边最近处O 的距离为d ,如战士想在最短时间内将人送上岸,则摩托艇登陆的地点离O 点的距离为( C ) A .21222υυυ-d B .0 C .21υυd D .12υυd 3某人横渡一河流,船划行速度和水流动速度一定,此人过河最短时间为了T 1;若此船用最短的位移过河,则需时间为T 2,若船速大于水速,则船速与水速之比为( ) (A) 212 22 T T T - (B) 12T T (C) 222 11T T T - (D) 21T T 4小河宽为d ,河水中各点水流速度大小与各点到较近河岸边的距离成正比,d v k kx v 04==,水,x 是各点到近岸的距离,小船船头垂直河岸渡河,小船划水速度为0v ,则下列说法中正确的是( ) A 、小船渡河的轨迹为曲线 B 、小船到达离河岸2d 处,船渡河的速度为02v C 、小船渡河时的轨迹为直线 D 、小船到达离河岸4/3d 处,船的渡河速度为010v 5. 如图1所示,人用绳子通过定滑轮以不变的速度0v 拉水平面上的物体A ,当绳与水平方向成θ角时,求 物体A 的速度。 6 如图3所示,某人通过一根跨过定滑轮的轻绳提升一个质量为m 的重物,开始时人在滑轮的正下方, 绳下端A 点离滑轮的距离为H 。人由静止拉着绳向右移动,当绳下端到B 点位置时,人的速度为v ,绳 与水平面夹角为θ。问在这个过程中,人对重物做了多少功? 7. 一条宽度为L 的河,水流速度为水v ,已知船在静水中速度为船v ,那么: (1)怎样渡河时间最短?(2)若水船 v v >,怎样渡河位移最小?(3)若水船v v <,怎样渡河船漂下的距离最短?

商人安全过河问题

讨论资金积累、国民收入与人口增长的关系 班级:2009级数学与应用数学 黄全(组长): P092314746 邱亚彪: P091712712 谢志成:P091712679 央金:P091715381 罗国庭:P091712739

讨论资金积累、国民收入与人口增长的关系 摘要 如何保证人口增长对国民收入影响的正效应和国民平均收入持续性增长,一直是全国人民所共同关注的问题。本文对资金积累、国民收入和人口增长三者之间的关系进行讨论,通过导数结合三者之间存在的基本规律,建立相应的微分方程,利用微分方程法给出方程,由matlab解得资金积累、国民收入与人口增长的关系。通过掌握该关系,确定资金积累的增长率大于人口增长率时国民收入才会增长,从而更好地调整人口出身率、控制人口的数量和人口质量,保证我国人口增长与国民收入增长之间的适当的比例关系,使得国民平均持续性增长,促进社会经济的迅速发展,提高人民的生活质量,为整个社会的长远战略需求做贡献。 关键字:资金积累状态转移律图解法微分方程决策

一、 问题重述 讨论资金积累、国民收入与人口增长的关系 (1)若国民平均收入x 与按人口平均资金积累y 成正比,说明仅当总资金积累 的相对增长率k 大于人口的相对增长率r 时,国民平均收入才是增长的. (2)作出k(x)和r(x)的示意图,说明二曲线交点是平衡点,讨论它的稳定性。 (3)分析人口激增会引起什么后果 二、符号说明 1x : t 时刻总资金累积量,2x :t 时刻人口数量, 3x :国民平均收入量 ,k :总资金的相对增长率 r :人口的相对增长率 三 、模型的假设 在一定时期后,增长的人口数量为::22x rx '=; 总资金的增长量为:11x kx '= ; 四、问题的分析 在社会主义发展的初级阶段,国民收入是指一定时期(通常为1年)内,物质生产部门劳动者新创造的价值,它是物质资料生产进一步发展和人口再生产条件改善的物质基础。在其他条件已定的情况下,国民收入总量愈多,人均消费基金和积累基金也越多,从而有利于人们生活的改善和技术装备水平的提高,也有利于人口数量的控制和人口质量的提高。人口增长从 3个方面影响国民收入的增减: ① 人口或劳动者数量的多少; ② 每个劳动者技术装备水平的高低; ③ 劳动者节省消耗和管理才能的大小。 国民收入又分为资金的累积和消费,累积资金=国民收入错误!未找到引用源。消费资金,而消费资金=基本消费资金错误!未找到引用源。人口发展速度。因此, 为增加人均国民收入,增强一国的经济实力和提高人民生活水平,要在大力发展经济、增加生产的基础上合理地调节人口增长。

相关文档
最新文档