马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
<P>function[preij,gl]=spij2(Distance,i,j)%输入变量Distance表示给定的网络矩阵,i,j分别表示要求的<BR> %最短路径的源,目的节点:输出变量preij表示得到的最短路径 <BR> %gl用于标志点j是否是孤立点<BR>M=1000;<BR>u=[];<BR>u(i)=M;<BR>S(i)=1;<BR>pre(i)=M;<BR>w=Distance;<BR>N=size(Distance,1);<BR>row=N;<BR>PB=w(i,:);<BR>for m=1:row<BR> if m~=i<BR> u(m)=w(i,m);<BR> s(m)=0;<BR> pre(m)=i;<BR> end<BR>end</P>
<P>if(min(u)==M)<BR> sprintf('There are no paths from vi to other!');<BR> gl=1;<BR> preij=zeros(1,N);<BR> break<BR>end</P>
<P>for m=1:row<BR> for n=1:row<BR> if S(n)==0<BR> PB(n)=u(n);<BR> else<BR> PB(n)=M;<BR> end<BR> end</P>
<P> P_MIN=min(PB);</P>
<P> for n=1:row<BR> f=1;<BR> if PB(n)==P_MIN<BR> S(n)=1;<BR> just=n;<BR> f=0;<BR> end<BR> if f==0<BR> break<BR> end<BR> end</P>
<P> for m=1:row<BR> if S(m)==0<BR> if u(just)+w(just,m)<u(m)<BR> u(m)=u(just)+w(just,m);<BR> pre(m)=just;<BR> end<BR> end<BR> end<BR> end<BR> <BR> <BR>p=j;<BR>gl=1;%gl用于标志点j是否是孤立点,gl=1时点j是孤立点,gl=0时j不是孤立点<BR>for q=1:N<BR> if(p~=q)&(Distance(q,p)~=0)&(Distance(q,p)~=M)<BR> gl=0;<BR> end<BR>end</P>
<P><BR>preij=zeros(1,N);<BR>preij(i)=M;<BR>if gl==1<BR> preij=zeros(1,N);<BR>else<BR> k=j;<BR> while pre(k)~=M<BR> preij(k)=pre(k);<BR> k=pre(k);<BR> end<BR>end</P>
<P>preij;<BR>gl;<BR>%这个子程序基于Dijkstra算法,主要用于计算点i到点j的最短路径<BR><BR><BR><BR>显示的错误是??? Input argument 'i' is undefined.</P>
<P>Error in ==> d:\MATLAB6p5\work\spij2.m<BR>On line 6 ==> u(i)=M;<BR><BR><BR><BR><BR></P> |