下载此文档

商人过河matlab程序以及解析.doc


文档分类:资格/认证考试 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
数学建模作业班级:数学131:丁延辉学号:13190122(二)商人过河Matlab代码三个商人三个随从z=zeros(30,3);%z为由(a,b,c)的列向量组成的3行30列数组,初始化为0矩阵,a,b,c代表此刻此岸的商人,仆人数量以及船的运行状态,c=1表示即将向彼岸运行m=zeros(1,20);%m为一维行向量,初始化为1矩阵,用于在后面的程序中判断第k次选择的乘船方案d=[0,1,1;0,2,1;1,0,1;1,1,1;2,0,1];%共有5种可以选择的乘船方案,最后面一列全为1,即用于在后面表示使得z(k,3)的取值保持随着k的奇偶性保持着0-(1,:)=[3,3,1];%初始状态为[3,3,1]k=1;m(k)=1;%第一次默认的乘船方案为决策1——d(1)flag=1;%用于在后面判断是否成功找到方案answer=0;%用于在后面判断是否找到答案whilek>0%保持k>0ifm(k)>5flag=0;break;endp=0;z(k+1,:)=z(k,:)+(-1)^k*d(m(k),:);%每一次的运算规则都是z(k+1)=z(k)-(-1)^k*d(m(k),:),d(m(k),:)表示决策方案a=z(k+1,1);%将当前情况的矩阵数值复制给a商人,b仆人b=z(k+1,2);c=z(k+1,3);if(a==3&&(b==0||b==1||b==2||b==3))||(a==1&&b==1)||(a==2&&b==2)||(a==0&&(b==0||b==1||b==2||b==3))%判断(a,b)是否符合限定情况forj=1:k%判断是否此岸a,b,c与之前有重复,如果是,结束此次循环,重新选择乘船方案ifa==z(j,1)&&b==z(j,2)&&c==z(j,3)ifm(k)~=5%决策方案只有5种,所以m(k)<=5,m(k)=m(k)+1;%因为有重复,所以换下一种决策方案elsewhile(m(k)==5)&&(k>1)k=k-1;%回溯,这一步骤已经把所有决策取尽,无可用解法,于是将后退一步,同时换下一种决策方案end%while循环的目的是防止前面几步的决策都是5,导致k=k-1,m(k)=m(k)+1后数组越界,一直找到前面不是m(k)=5的步骤m(k)=m(k)+1;endp=1;break;elsep=0;endendifp==1%程序在跳出内层for循环之后,因为要换成决策方案,所以同时跳出,直接进入下一次while循环,continue;endifa==0&&b==0%判断是否达到目标情况answer=1;fprintf('essfullyfound!\n每一次的此岸人员分布:商人仆人\

商人过河matlab程序以及解析 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人2286107238
  • 文件大小28 KB
  • 时间2020-10-13