【正文】
if (node(j,1)=1 amp。amp。 node(j,1)==node(j,2)) forward(j,1,1)。 end if (node(j,1)==0 || node(j,1)==3)amp。amp。 node(j,2)=2 forward(j,0,2)。 end if (node(j,1)==2 amp。amp。 node(j,2)==2 || node(j,1)==3 amp。amp。 node(j,2)==1) forward(j,2,0)。 end elseif node(j,3)==0%船在右岸 if ( (node(j,1)==0) || (node(j,1)==3) )amp。amp。(node(j,2)=2) afterward(j,0,1)。 end if (node(j,1)==2 amp。amp。 node(j,2)==2 || node(j,1)==0 amp。amp。 node(j,2)==1) afterward(j,1,0)。 end if (node(j,1)=2 amp。amp。 node(j,1)==node(j,2)) afterward(j,1,1)。 end if (node(j,1)==0 || node(j,1)==3)amp。amp。 node(j,2)=1 afterward(j,0,2)。 end if (node(j,1)==1 amp。amp。 node(j,2)==1 || node(j,1)==0 amp。amp。 node(j,2)==2) afterward(j,2,0)。 end end%display(open_list)。open_list(r_row(1),:)=[ ]。index=index1。%open表個數(shù)減1%display(open_list)。 end%%%從左岸到右岸,船上傳教士x個,野人y個 function []=forward(z,x,y)global n。global node open_list index。node(n,1)=node(z,1)x。node(n,2)=node(z,2)y。node(n,3)=0。r=search(z)。if(~r) returnendnode(z,4)=0。node(n,4)=1。node(n,5)=z。s=destination()。if s node(n,4)=1。endindex=index+1。open_list(index,1)=n。n=n+1。%%%%從右岸到左岸,船上傳教士x個,野人y個 function []=afterward(z,x,y)global n。global node open_list index。node(n,1)=node(z,1)+x。node(n,2)=node(z,2)+y。node(n,3)=1。r=search(z)。if(~r) returnendnode(z,4)=0。node(n,4)=1。node(n,5)=z。s=destination()。if s node(n,4)=1。endindex=index+1。open_list(index,1)=n。n=n+1。%%function r=search(x)global n node。i=x。while node(i,5)~=1 if node(i,1)==node(n,1) amp。amp。 node(i,2)==node(n,2) amp。amp。 node(i,3)==node(n,3) r=0。 return end i=node(i,5)。end%跟初始節(jié)點比較if node(i,1)==node(n,1) amp。amp。 node(i,2)==node(n,2) amp。amp。 node(i,3)==node(n,3) r=0。 returnendr=1。%均不相同%%function s=destination()global n node。if node(n,1)==0 amp。amp。 node(n,2)==0 amp。amp。 node(n,3)==0 s=1。 returnends=0。