首页 > 代码库 > 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最短路径算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。