C#实现最短路径
来源:互联网 发布:手机淘宝没有卖家中心 编辑:程序博客网 时间:2024/05/17 08:08
//迪杰斯特拉算法: /* 1.给定起点与终点,从起点开始找距离最小的点,再找距离找到点最小的(未找过的),直到找到终点 */ public static void Djstl(Graph g,int s,int e) { int[] label=new int[g.nums]; //标记是否找过 for (int i = 0; i < label.Length;i++ ) { label[i] = -1; } label[0] = 1; int sums=0; Console.Write(s.ToString()+" "); while(s!=e) { int low = 10000; int k = s; for (int j = 0; j < g.nums;j++ ) { if(label[j]==-1&&low>g.adjMatrix[s,j]&&g.adjMatrix[s,j]!=0) { low = g.adjMatrix[s, j]; k = j; } } label[s]=1; s = k; Console.Write(s.ToString()+" "); } }
//弗洛伊德算法 //初始化两个二维矩阵 //第一个用于记录个点到个点的距离,第二个用于记录i到j需要经过的中间点 //依次计算经过中间点时各个顶点距离的变化,若小于目前的点,则更改;并将第二个矩阵中的中间点也更改 public static void Flyd(Graph g, int s, int e) { int[,] JuLi = new int[g.nums, g.nums]; int[,] Point=new int[g.nums,g.nums]; //赋初始值 for(int i=0;i<g.nums;i++) { for (int j = 0; j < g.nums;j++ ) { JuLi[i,j]=g.adjMatrix[i,j]; Point[i,j]=j; } } //开始计算距离 for (int k = 0; k < g.nums; k++) //表示中间点为k { for (int i = 0; i < g.nums; i++) { for (int j = 0; j < g.nums; j++) { if(JuLi[i,j]>JuLi[i,k]+JuLi[k,j]) { JuLi[i, j] = JuLi[i, k] + JuLi[k, j]; Point[i, j] = Point[i,k];//经过的中间点 } } } } Console.WriteLine("变化后JuLi:"); for (int i = 0; i < g.nums; i++) { for (int j = 0; j < g.nums; j++) { Console.Write(JuLi[i, j].ToString() + " "); } Console.WriteLine(); } Console.WriteLine("变化后Point:"); for (int i = 0; i < g.nums; i++) { for (int j = 0; j < g.nums; j++) { Console.Write(Point[i, j].ToString() + " "); } Console.WriteLine(); } Console.WriteLine(s.ToString() + "到" + e.ToString() + "的最短距离:"+JuLi[s,e].ToString()); Console.WriteLine(s.ToString() + "到" + e.ToString() + "的路径:"); Console.Write(s.ToString()+" "); while(s!=e) { Console.Write(Point[s,e].ToString()+" "); s=Point[s,e]; } }1.使用迪杰斯特拉算法://计算最短路径:迪杰斯特拉 int[,] a2 = {{0,1,5, infinity,infinity,infinity,infinity,infinity,infinity}, {1,0,3, 7,5,infinity,infinity,infinity,infinity}, {5,3,0, infinity,1,7,infinity,infinity,infinity}, {infinity,7,infinity, 0,2,infinity,3,infinity,infinity}, {infinity,5,1, 2,0,3,6,9,infinity}, {infinity,infinity,7,infinity,3,0,infinity,5,infinity}, {infinity,infinity,infinity, 3,6,infinity,0,2,7}, {infinity,infinity,infinity , infinity,9,5,2,0,4}, {infinity,infinity,infinity, infinity,infinity,infinity,7,4,0} }; Graph g2 = new Graph(9); for (int i = 0; i < a2.GetLength(0); i++) { g2.Add_Vertex(ver[i]); for (int j = 0; j < a2.GetLength(1); j++) { g2.Add_Edge(i, j, a2[i, j]); } }string[] ver = { "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", "v8" }; g2.Show_Graph(); Djstl(g2,0,8);2.使用佛洛依德算法 //弗洛伊德算法 Flyd(g2,0,8);
阅读全文
0 0
- C#实现最短路径
- Dijkstra 最短路径算法C#实现
- C# 实现最短二叉树路径
- 最短路径实现
- 转载:路径规划(最短路径)算法C#实现
- 路径规划(最短路径)算法C#实现[转]
- 路径规划(最短路径)算法C#实现
- 路径规划(最短路径)算法C#实现
- 路径规划(最短路径)算法C#实现
- 最短路径算法实现
- 最短路径的实现
- 最短路径的实现
- 最短路径的实现
- matlab实现最短路径
- 最短路径的实现
- 最短路径算法实现
- floyd最短路径算法C#版
- C#最短路径算法demo
- 二分答案法
- 软件工程
- 尽量延后变量定义式的出现时间《Effective C++》
- Android中的三级缓存
- ActiveMQ学习总结——(二)Queue队列模式示例
- C#实现最短路径
- 移动139邮箱被曝出漏洞
- Bentley Map Enterprise V8i v08.11.09.805 CHS Win32 1DVD
- 开发流程
- JS对象数组去重引申出的知识点
- 动画
- 安装weblogic12c教程
- 转:面向接口编程的好处分析
- Tensorflow一些常用基本概念与函数(2)