1 / 7
文档名称:

人猫鸡米渡河问题的matlab求解法.docx

格式:docx   大小:17KB   页数:7页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

人猫鸡米渡河问题的matlab求解法.docx

上传人:zhuwo11 2022/8/23 文件大小:17 KB

下载得到文件列表

人猫鸡米渡河问题的matlab求解法.docx

文档介绍

文档介绍:摘要:人带着猫、鸡、米过河,船除需要人划之外,至多能载猫、鸡、米三者 之一,而当人不在场时猫要吃鸡、鸡要吃米,试通过数学建模,运用计算机给出 一个安全渡河方案,并使渡河次数尽量少。
一、 问题分析:
此问题是从状态向量A 经过奇数次运算e (L,B,M,s)函数:
用来实现渡河总思路。思路为:将起始矩阵 A 分别与可取运载相加(使用 二进制法则),判断相加后的矩阵 C 是否是(0,0,0,0),如果是,则渡河成 功。否则,用fuhe(C,M)函数判断C是否是可取状态,如果是,则打印并将C 与初始矩阵合并成新矩阵,继续调用 函数。
、fuhe(C,M)函数:
判断和矩阵C是否属于矩阵M,如果是,则返回1,否则返回0.
、 Panduan (S)函数:
判断 S 矩阵中是否有两个相同的状态,即行向量。如果有,则返回 0,否则 返回 1.
、 print(K,C,s)函数:
打印相应的状态。
五、程序:
1、 文件:
clear;clc;
A=[1,1,1,1];
B=[1,0,1,0;1,1,0,0;1,0,0,1;1,0,0,0];
M=[1,1,1,0;0,0,0,1;1,1,0,1;0,0,1,0;1,0,1,1;0,1,0,0;1,0,1,0;0,1,0,1]; duhe(A,B,M,1);
2、 文件:
function duhe(L,B,M,s);
[h,l]=size(L);
for k=s:h
for i=1:4
C=mod(L(k,:)+B(i,:),2);
if C==[0,0,0,0]
print(B(i,:),C,s);
fprintf('渡河成功\n\n');
break;
else if fuhe(C,M)==1
print(B(i,:),C,s);
S=[L;C];
if Panduan(S)==1 duhe(S,B,M,s+1);
else
fprintf('此渡河方案不可行\n\n');
end
end
end
end
end
3、 文件:
function y=fuhe(C,M) y=0;
for i=1:8
if(C==M(i,:))
y=1;
break;
end
end
4、 文件: function z=Panduan(S)
z=1;
[m,n]=size(S);
for p=1:m
for q=(p+1):m
if S(p,:)-S(q,:)==[0,0,0,0]
z=0;
break;
end
end
end
5、 文件:
function print(K,C,s)
fprintf(第%门次渡河::s);
if K(1)==1
fprintf('人,');
end
if K(2)==1
fprintf('猫,');
end
if K(3)==1
fprintf('鸡,');
end
if K(4)==1
fprintf('米');
end
if C(1)==0
fprintf('从左岸到达右岸\n'); else
fprintf('从右岸回到左岸\n'); e