⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sf1.txt

📁 最短路算法------floyd算法
💻 TXT
字号:
function ShortPath_floyd(w,start,terminal) 
%w----adjoin matrix, w=[0 50 inf inf inf;inf 0 inf inf 80;
%inf 30 0 20 inf;inf inf inf 0 70;65 inf 100 inf 0];
%start-----the start node;
%terminal--------the end node;    
n=size(w,1);
[D,path]=floyd1(w);%调用floyd算法程序

%找出任意两点之间的最短路径,并输出
for i=1:n
    for j=1:n
        Min_path(i,j).distance=D(i,j);
        %将i到j的最短路程赋值 Min_path(i,j).distance
        %将i到j所经路径赋给Min_path(i,j).path
        Min_path(i,j).path(1)=i;
        k=1;
        while Min_path(i,j).path(k)~=j
            k=k+1;
            Min_path(i,j).path(k)=path(Min_path(i,j).path(k-1),j);
        end
    end
end
s=sprintf('任意两点之间的最短路径如下:');
disp(s);
for i=1:n
    for j=1:n
        s=sprintf('从%d到%d的最短路径长度为:%d\n所经路径为:'...
            ,i,j,Min_path(i,j).distance);
        disp(s);
        disp(Min_path(i,j).path);
    end
end

%找出在指定从start点到terminal点的最短路径,并输出
str1=sprintf('从%d到%d的最短路径长度为:%d\n所经路径为:',...
    start,terminal,Min_path(start,terminal).distance);
disp(str1);
disp(Min_path(start,terminal).path);

%Foldy's Algorithm 算法程序
function [D,path]=floyd1(a)
n=size(a,1);
D=a;path=zeros(n,n);%设置D和path的初值
for i=1:n
   for j=1:n
      if D(i,j)~=inf
         path(i,j)=j;%j是i的后点
     end
   end
end
%做n次迭代,每次迭代都更新D(i,j)和path(i,j)
for k=1:n
   for i=1:n
      for j=1:n
         if D(i,k)+D(k,j)<D(i,j)
            D(i,j)=D(i,k)+D(k,j);%修改长度
            path(i,j)=path(i,k);%修改路径
        end
      end
   end
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -