首页 > 代码库 > Floyd最短路径算法

Floyd最短路径算法

看完这篇文章写的小程序,Floyd最短路径算法,求从一个点到另一个点的最短距离,中间可以经过其他任意个点。三个for循环,从i到j依次经过k的最短距离,最外层for循环是经过点K,内部两个循环是从i(0)到j(0,1,2,3)经过k(0)的最短距离,从i(1)到j(0,1,2,3)经过k(0)的最短距离,······,从i(3)到j(0,1,2,3)经过k(0)的最短距离;在经过k(0)的基础上再经过k(2),从i(0)到j(0,1,2,3)经过k(1)的最短距离,从i(1)到j(0,1,2,3)经过k(1)的最短距离,········

程序是根据上面那篇文章写的

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace Floyd最短路径算法
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             int[,] e = new int[4, 4] {  { 0, 2, 6, 4 }, 
14                                         { 9999, 0, 3, 9999 }, 
15                                         { 7, 9999, 0, 1 }, 
16                                         { 5, 9999, 12, 0 } };
17 
18             int[,] e1 = new int[4, 4] { { 0, 2, 6, 4 }, 
19                                         { 9999, 0, 3, 9999 }, 
20                                         { 7, 9999, 0, 1 }, 
21                                         { 5, 9999, 12, 0 } };
22 
23             for (int i = 0; i < 4; i++)
24             {
25                 for (int j = 0; j < 4; j++)
26                 {
27                     Console.Write(e1[i, j] + "       ");
28                 }
29                 Console.WriteLine();
30             }
31             for (int k = 0; k < 4; k++)  //分别经过四个地点
32             {
33                 for (int i = 0; i < 4; i++) //i是第一个地点
34                 {
35                     for (int j = 0; j < 4; j++)  //j是第二个地点
36                     {
37                         //从i到k,k到j 小于i到j
38                         if (e1[i, k] + e1[k, j] < e1[i, j])
39                         {
40                             e1[i, j] = e1[i, k] + e1[k, j];
41 
42                             Console.WriteLine("从位置{0}到位置{1}经过了位置{2},原路径距离{3},优化后距离{4}",i+1,j+1,k+1,e[i,j],e1[i,j]);
43                         }
44                     }
45                 }
46             }
47             Console.WriteLine("----------------------------------");
48             for (int i = 0; i < 4; i++)
49             {
50                 for (int j = 0; j < 4; j++)
51                 {
52                     Console.Write(e1[i, j] + "    ");
53                 }
54                 Console.WriteLine();
55             }
56             Console.ReadKey();
57         }
58     }
59 }

 

Floyd最短路径算法