农夫,狐狸,鸡,米的程序

更新时间:2023-09-05 18:26:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一个有关农夫,狐狸,鸡,米过河的matlab程序

a0=[ 0 0 0 0];%左岸初态其中(农夫,狐狸,鸡,小米)
c0=[ 0 0 0 0];
d0=[ 0 0 0 0];

flag=0;
a1=[0 0 0 0];%右岸的状态
a2=[ 1 1 1 1];%表示左岸壮态
b=[1 1 0 0;1 0 1 0;1 0 0 1];
status=[0 0 0 0];
maxlter=100;
for i=1:100
for j=1:3
statusc=a2;
a2=a2-b(j,:);
if(a2==[0 0 0 0])
flag=1;
c0=[c0;b(j,:)];%来的状态
break;
end

statust=a2;


if(check(a2)==1)%检查左岸是否可行
a1=a1+b(j,:);
c0=[c0;b(j,:)];%来的状态
if(a1==[1 1 1 1])
flag=1;
break;
else
sta=a1;
a1=a1-[1 0 0 0];

if(check(a1)==1)%检查农夫一个人回去右岸是否可以
d0=[d0;[1 0 0 0]];%回去的状态
a2=a2+[1 0 0 0];
break;
else %检查农夫一个人回去右岸是否可以
a1=sta;
for k=2:3 %如果不行,那他将带谁去;
a1=a1-b(k,:);
if(check(a1)==1)
d0=[d0;b(k,:)];%回去的状态
a2=a2+b(k,:);
break;
end
a1=a1+b(k,:);
end
end
end

end
if a2==statust
a2=statusc;
end

end
if(flag==1)
disp('划船从左岸去右岸1代表上船:')
disp('农夫 狐狸 鸡 小米')
c0(2:end,:)
disp('划船从右岸回左岸1代表上船:')
disp('农夫 狐狸 鸡 小米')
d0(2:end,:)
break;
end
end







function s=check(a)

r=find(a==1);
s=0;
x=0;%代表狐狸0不在,1在
y=0;%代表鸡0不在,1在
z=0;%代表小米0不在,1在
if length(find(a==1))==1&length(find(a>=0))==4
s=1;
end
for i=1:length(r)
if(r(i)==1)
s=1;
end
if(r(i)==2)
x=1; %代表狐狸
end
if(r(i)==3)
y=1;
end
if(r(i)==4)
z=1;
end
e
nd
if(y==0&x==1&z==1)
s=1;
end


划船从左岸去右岸1代表上船:
农夫 狐狸 鸡 小米

ans =

1 0 1 0
1 1 0 0
1 0 1

一个有关农夫,狐狸,鸡,米过河的matlab程序

0
1 0 0 1
1 0 1 0

划船从右岸回左岸1代表上船:
农夫 狐狸 鸡 小米

ans =

1 0 0 0
1 0 1 0
1 0 1 0
1 0 0 0

>>



本文来源:https://www.bwwdw.com/article/133i.html

Top