
商人过河问题,想要得到所有的安全过河方案,怎么运行成功 matlab 5
>>clearallm=3;n=3;t=2;%n为商人数,m为仆人数,t为每次过河的最多人数d=0;s=0;fori=0:mforj=0:nifi>=j&m-i>=n-j...
>> clear all
m=3;
n=3;
t=2;
% n为商人数,m为仆人数,t为每次过河的最多人数
d=0;
s=0;
for i=0:m
for j=0:n
if i>=j&m-i>=n-j|i==n|i==0
s=s+1;
S(s,:)=[i j];
end
%生成状态数组集合S
if i+j>0&i+j<=t&(i>=j|i==0)
d=d+1;
D(d,:)=[i j];
end
% 满足条件D={(u,v)|1<=u+v<=t,u,v=0,1,2}
end
end
p=20;
%假定要求在20步内实现安全过河
h=1;
l=1;
q=[m n];
f=0;
%判别是否允许决策集合
while f~=1&h<p
%判断是否可行,判断条件为f不等于1且步骤数小于20
k=1;
sa=[];
sb=[];
for i0=1:l
s0=q(i0,:);
if f==1
break
end
for i=1:d %第h步s随决策d的变化
s1=s0+(-1)^h*D(i,:);
if s1==[0,0]
sa=[0,0];
sb=D(i,:);
f=1;
break
end
for j=2:s-1 %经过决策后允许状态
if s1==S(j,:)
if k==1
sa(k,:)=s1;
sb(k,:)=D(i,:);
k=k+1;
break
end
if k>1
f1=0;
for i1=1:k-1
if s1==sa(i1,:)
f1=1;
break
end
end
end
if f1==0
sa(k,:)=s1;
sb(k,:)=D(i,:);
k=k+1;
break
end
end
end
end
h=h+1;
end
end
fprintf('\n过河步骤:\n');
for i = 1 : h
fprintf('第%d步:%d商人%d仆人过河', i, sb(2*i-1,:));
if i < h
fprintf(',%d商人%d仆人返回\n', sb(2*i,:));
else
fprintf(',完成\n\n');
end 展开
m=3;
n=3;
t=2;
% n为商人数,m为仆人数,t为每次过河的最多人数
d=0;
s=0;
for i=0:m
for j=0:n
if i>=j&m-i>=n-j|i==n|i==0
s=s+1;
S(s,:)=[i j];
end
%生成状态数组集合S
if i+j>0&i+j<=t&(i>=j|i==0)
d=d+1;
D(d,:)=[i j];
end
% 满足条件D={(u,v)|1<=u+v<=t,u,v=0,1,2}
end
end
p=20;
%假定要求在20步内实现安全过河
h=1;
l=1;
q=[m n];
f=0;
%判别是否允许决策集合
while f~=1&h<p
%判断是否可行,判断条件为f不等于1且步骤数小于20
k=1;
sa=[];
sb=[];
for i0=1:l
s0=q(i0,:);
if f==1
break
end
for i=1:d %第h步s随决策d的变化
s1=s0+(-1)^h*D(i,:);
if s1==[0,0]
sa=[0,0];
sb=D(i,:);
f=1;
break
end
for j=2:s-1 %经过决策后允许状态
if s1==S(j,:)
if k==1
sa(k,:)=s1;
sb(k,:)=D(i,:);
k=k+1;
break
end
if k>1
f1=0;
for i1=1:k-1
if s1==sa(i1,:)
f1=1;
break
end
end
end
if f1==0
sa(k,:)=s1;
sb(k,:)=D(i,:);
k=k+1;
break
end
end
end
end
h=h+1;
end
end
fprintf('\n过河步骤:\n');
for i = 1 : h
fprintf('第%d步:%d商人%d仆人过河', i, sb(2*i-1,:));
if i < h
fprintf(',%d商人%d仆人返回\n', sb(2*i,:));
else
fprintf(',完成\n\n');
end 展开
1个回答
展开全部
我把
sa=[];
sb=[];
改成
sa=ones(40,2);
sb=ones(40,2);
能运行。不知道符合你要求吗。改后的程序在附件中有
追问
程序可能有其他错误,而且不用20步,题目是“三名商人各带一个随从乘船渡河,只有一只小船且每次只能渡两人,河的任一岸商人数为零或者商人数大于等于随从数。”
参照程序;
http://zhidao.baidu.com/question/511914128.html
这个程序只得到了一种最优的过河方案,我想要得到所有的方案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2025-08-05 广告
传统跨境收款存在线下排队、费用高昂、到账延迟、流程繁琐等诸多痛点。Paykka 通过线上化和本地化服务,有效解决了这些问题,优化了用户的收款体验,让跨境收款更加便捷高效。...
点击进入详情页
本回答由paykka提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询