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

📄 floyd.m

📁 MATHEMATICA 程序 最短路径算法
💻 M
字号:
d = Flatten[Import["c:\\2.xls"], 1];
floyd[d0_List, dian1_, dian2_] := 
Module[{d = d0, n, i, j, k, r, t, lujing}(*d0为邻接矩阵,
dian1.dian2为要求得的最短路径两点*),
n = Length[d];
r = DiagonalMatrix[Table[0, {i, n}]];
For[i = 1, i <= n, i++,
   For[j = 1, j <= n, j++,
       r[[i, j]] = j;
     ];
   ];
For[k = 1, k <= n, k++,
   For[i = 1, i <= n, i++,
     For[j = 1, j <= n, j++,
       If[d[[i, k]] + d[[k, j]] < d[[i, j]], 
         d[[i, j]] = d[[i, k]] + d[[k, j]]; r[[i, j]] = r[[i, k]];];
       ];
     ];
   ];(*d 为最小权值,r为临近链接点*)
Print["最小权值为:", d[[dian1, dian2]]];
lujing = {dian1};
Print ["Path:", lujing[[1]] ];
t = r[[dian1, dian2]];
While[t != dian2, t = r[[t, dian2]]; Print ["---->", t]; 
   AppendTo[lujing, t]];
]

floyd[d, 1, 6]

最小权值为:80.

Path:1

---->3

---->5

---->6

(*2.xls:mingze928@163.com*)

⌨️ 快捷键说明

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