dijkstra怎么用matlab实现
希望能直接给出代码,谢谢!ps要是给出注释就在完美不过了,再次感谢邻接矩阵如下,求第4个点到各个点的最短距离[011infinfinfinfinf101infinfinf...
希望能直接给出代码,谢谢!
ps 要是给出注释就在完美不过了,再次感谢
邻接矩阵如下,求第4个点到各个点的最短距离
[0
1
1
inf
inf
inf
inf
inf
1
0
1
inf
inf
inf
inf
inf
1
1
0
1
inf
inf
inf
1
inf
inf
1
0
1
inf
1
inf
inf
inf
inf
1
0
1
inf
inf
inf
inf
inf
inf
1
0
1
inf
inf
inf
inf
1
inf
1
0
1
inf
inf
1
inf
inf
inf
1
0 ]
那个一列就是一行
我也不知道 度娘搞成这样了 展开
ps 要是给出注释就在完美不过了,再次感谢
邻接矩阵如下,求第4个点到各个点的最短距离
[0
1
1
inf
inf
inf
inf
inf
1
0
1
inf
inf
inf
inf
inf
1
1
0
1
inf
inf
inf
1
inf
inf
1
0
1
inf
1
inf
inf
inf
inf
1
0
1
inf
inf
inf
inf
inf
inf
1
0
1
inf
inf
inf
inf
1
inf
1
0
1
inf
inf
1
inf
inf
inf
1
0 ]
那个一列就是一行
我也不知道 度娘搞成这样了 展开
展开全部
a=[0 1 1 Inf Inf Inf Inf Inf;
1 0 1 Inf Inf Inf Inf Inf;
1 1 0 1 Inf Inf Inf 1;
Inf Inf 1 0 1 Inf 1 Inf;
Inf Inf Inf 1 0 1 Inf Inf;
Inf Inf Inf Inf 1 0 1 Inf;
Inf Inf Inf 1 Inf 1 0 1;
Inf Inf 1 Inf Inf Inf 1 0];
n=length(a); %节点个数
d=inf(1,n); %d存放到每点最短路径的向量
S=4;d(S)=0; %原点是第4点,同时也是目前的出发点
%原点到目前出发点距离是0
T=1:n;
T(T==S)=[]; %除了起始点,其他点都是未扩展的点
while ~isempty(T) %如果没有未扩展的点,那么完成全部点
tempd=a(S,T)+d(S);%计算:从目前出发点到所有未扩展点的距离+目前出发点到原点距离
mask=tempd<d(T); %找到比原来d数组记录更近的距离
d(T(mask))=tempd(mask); %刷新最近距离记录
[ind,ind]=min(d(T)); %从未扩展点中找到现在已知离原点最近的点
S=T(ind); %将已知里原点最近的点作为目前出发点
T(T==S)=[]; %从未扩展点中剔除该点
end
disp(d)
结果
2 2 1 0 1 2 1 2
也就是第四点到图中各点的最短路径
1 0 1 Inf Inf Inf Inf Inf;
1 1 0 1 Inf Inf Inf 1;
Inf Inf 1 0 1 Inf 1 Inf;
Inf Inf Inf 1 0 1 Inf Inf;
Inf Inf Inf Inf 1 0 1 Inf;
Inf Inf Inf 1 Inf 1 0 1;
Inf Inf 1 Inf Inf Inf 1 0];
n=length(a); %节点个数
d=inf(1,n); %d存放到每点最短路径的向量
S=4;d(S)=0; %原点是第4点,同时也是目前的出发点
%原点到目前出发点距离是0
T=1:n;
T(T==S)=[]; %除了起始点,其他点都是未扩展的点
while ~isempty(T) %如果没有未扩展的点,那么完成全部点
tempd=a(S,T)+d(S);%计算:从目前出发点到所有未扩展点的距离+目前出发点到原点距离
mask=tempd<d(T); %找到比原来d数组记录更近的距离
d(T(mask))=tempd(mask); %刷新最近距离记录
[ind,ind]=min(d(T)); %从未扩展点中找到现在已知离原点最近的点
S=T(ind); %将已知里原点最近的点作为目前出发点
T(T==S)=[]; %从未扩展点中剔除该点
end
disp(d)
结果
2 2 1 0 1 2 1 2
也就是第四点到图中各点的最短路径
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询