欢迎来到天天文库
浏览记录
ID:12067826
大小:35.50 KB
页数:3页
时间:2018-07-15
《夫妻过河问题源码》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、functiony=boat()m=input('输入夫妻对数:');k=input('输入船的最大容量:');fori=1:m+1A=[m,i-1];B{i}=A;%B表示可取状态endfori=m+2:2*mA=[i-(m+1),i-(m+1)];B{i}=A;endfori=2*m+1:3*m+1A=[0,i-(2*m+1)];B{i}=A;end%下面的for语句是根据参数k算出所有决策d,用C表示.t=1;foru=0:1:kforv=0:1:kifu+v>=1&u+v<=kC{t}=[u,v];t=t+1;endendendD{1,1}
2、=[m,m];%D{1,1}表示初始状态.w=1;%w控制是否能够迭代成功.h=1;%h控制元素的个数.j=2;%j表示迭代的次数.x=0;%x是用来剔除掉不在允许状态集合中的元素.y=0;%y是防止重复剔除同一个元素.l=0;%l使用来标记元素是否被剔除.z(1)=0;z(2)=1;%z(j)表示上一步迭代后所剩下的所有元素.whilew>0%p表示可以进行下一步迭代的所有元素.forp=z(j-1)+1:z(j)%q表示每一个元素要经过k*(k+3)/2种决策迭代.forq=1:k*(k+3)/2D{h+1,j}=D{p,j-1}+(-1)^(
3、j-1).*C{q};h=h+1;l=1;%下面的for语句是核查迭代结果是否在允许状态集合B中.fore=1:3*m+1ifD{h,j}==B{e}x=1;break;endendifx==0h=h-1;y=1;l=0;end%下面的if语句是剔除掉本次迭代过程中出现的重复元素.ifj>2&y==0fori=z(j)+1:h-1ifD{h,j}==D{i,j};h=h-1;l=0;break;endendend%下面的if语句是剔除掉以前重复的元素.ifj>2&y==0ifj==3fori=z(1)+1:z(2)ifD{h,j}==D{i,j-2
4、}h=h-1;l=0;break;endendelsefori=z(j-2)+1:z(j-1)ifD{h,j}==D{i,j-2}h=h-1;l=0;break;endendendendifl==1forg=1:j-1D{h,g}=D{p,g};endendifl==1&D{h,j}==[0,0]w=-1;%w=-1表示可以在有限的步骤下安全过河.break;endx=0;y=0;l=0;endifw==-1;%w=-1表示可以在有限的步骤下安全过河.break;endendj=j+1;z(j)=h;ifz(j)==z(j-1)w=-2;%w=-2
5、表示不可以在有限的步骤下安全过河.break;endendifw==-1forg=1:j-1D{h,g}endendifw==-2disp('不能按规定过河');end
此文档下载收益归作者所有