Floyd最短路径算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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最短路径算法的主要内容,如果未能解决你的问题,请参考以下文章