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

📄 最短路径.txt

📁 求最短路径拉Yes
💻 TXT
字号:
A.标号法求解单源点最短路径:
   var
     a:array[1..maxn,1..maxn] of integer;
     b:array[1..maxn] of integer; {b[i]指顶点i到源点的最短路径}
     mark:array[1..maxn] of boolean;

   procedure bhf;
     var
       best,best_j:integer;
     begin
       fillchar(mark,sizeof(mark),false);
    mark[1]:=true; b[1]:=0;{1为源点}
    repeat
      best:=0;
        for i:=1 to n do
         If mark[i] then {对每一个已计算出最短路径的点}
          for j:=1 to n do
            if (not mark[j]) and (a[i,j]>0) then 
           if (best=0) or (b[i]+a[i,j]<best) then begin
             best:=b[i]+a[i,j];  best_j:=j;
          end;
       if best>0 then begin
         b[best_j]:=best;mark[best_j]:=true;
       end;
     until best=0;
     end;{bhf}

  B.Floyed算法求解所有顶点对之间的最短路径:
     procedure floyed;
       begin
for I:=1 to n do
 for j:=1 to n do
 if a[I,j]>0 then p[I,j]:=I else p[I,j]:=0; {p[I,j]表示I到j的最短路径上j的前驱结点}
  for k:=1 to n do {枚举中间结点}
    for i:=1 to n do
      for j:=1 to n do
        if a[i,k]+a[j,k]<a[i,j] then begin
       a[i,j]:=a[i,k]+a[k,j];
             p[I,j]:=p[k,j];
     end;
      end;

⌨️ 快捷键说明

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