最短路径 Floyd算法 matlab实现
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
function [D,R]=floyd(A)
%用floyd算法实现求任意两点之间的最短路程。可以有负权
%参数D为连通图的权矩阵
% A=[0 2 8 1 inf inf inf inf
% 2 0 6 inf 1 inf inf inf
% 8 6 0 7 5 1 2 inf
% 1 inf 7 0 inf inf 9 inf
% inf 1 5 inf 0 3 inf 8
% inf inf 1 inf 3 0 4 6
% inf inf 2 9 inf 4 0 3
% inf inf inf inf 8 6 3 0];
D=A;n=length(D);
for i=1:n
for j=1:n
R(i,j)=i;%赋路径初值
end
end
for k=1:n
for i=1:n
for j=1:n
if D(i,k)+D(k,j) D(i,j)=D(i,k)+D(k,j);%更新D(i,j),说明通过k的路程更短 R(i,j)=R(k,j);%更新R(i,j),需要通过k end end end hl=0; for i=1:n if D(i,i)<0 hl=1; break;%跳出内层的for循环 end end if(hl==1) fprintf('有负回路') break;%跳出最外层循环 end end