以前上课做的一道题,现在需要这个程序,可是却忘了怎么写程序开头。
关于最短路径的问题。
function [l,z,d,s]=Dijkstra(w,u0,ui);
if nargin=0;
w=[];
u0=1;
上面的是我自己加上去的,可是不行,你们帮我改下,谢谢了。
后面的是:
w=[0 2 1 8 inf inf inf inf;
2 0 inf 6 1 inf inf inf;
1 inf 0 7 inf inf 9 inf;
8 6 7 0 5 1 2 inf;
inf 1 inf 5 0 3 inf 9;
inf inf inf 1 3 0 4 6;
inf inf 9 2 inf 4 0 3;
inf inf inf inf 9 6 3 0]
n=size(w,1);
w1=w(1,
;
%赋初值
for i=1:n
l(i)=w1(i);
z(i)=1;
end
s=[];
s(1)=1;
u=s(1);
k=1
l
z
while k<n
% 更新 l(v) 和 z(v)
for i=1:n
for j=1:k
if i~=s(j)
if l(i)>l(u)+w(u,i)
l(i)=l(u)+w(u,i);
z(i)=u;
end
end
end
end
l
z
%求v*
ll=l;
for i=1:n
for j=1:k
if i~=s(j)
ll(i)=ll(i);
else
ll(i)=inf;
end
end
end
lv=inf;
for i=1:n
if ll(i)<lv
lv=ll(i);
v=i;
end
end
lv
v
s(k+1)=v
k=k+1
u=s(k)
end
l
z
w=[0 2 1 8 inf inf inf inf;2 0 inf 6 1 inf inf inf;1 inf 0 7 inf inf 9 inf;...
8 6 7 0 5 1 2 inf;inf 1 inf 5 0 3 inf 9;inf inf inf 1 3 0 4 6;...
inf inf 9 2 inf 4 0 3;inf inf inf inf 9 6 3 0]
n=size(w,1);
w1=w(1,
;
%赋初值
for i=1:n
l(i)=w1(i);
z(i)=1;
end
s=[];
s(1)=1;
u=s(1);
k=1
l
z
while k<n
% 更新 l(v) 和 z(v)
for i=1:n
for j=1:k
if i~=s(j)
if l(i)>l(u)+w(u,i)
l(i)=l(u)+w(u,i);
z(i)=u;
end
end
end
end
l
z
试下这个程序....
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |