迪杰斯特拉算法 计算两点之间最短距离
2014-03-26 20:06
567 查看
using System; using System.Collections.Generic; using System.Linq; using System.Text; //迪杰斯特拉算法 计算两点最短距离 namespace Dijkstra { class Program { /// <summary> /// 邻接矩阵 /// </summary> private static int?[,] rectMatrix; /// <summary> /// 点 的距离 /// </summary> private static int[] distanse; /// <summary> /// 访问过的点 /// </summary> private static int[] visitPoints; /// <summary> /// 路径 /// </summary> private static string[] path; /// <summary> /// 坐标点数量 /// </summary> private static int pointNum = 10; /// <summary> /// 起始点 /// </summary> private static int startPoint; /// <summary> /// 终点 /// </summary> private static int endPoint; static void Main(string[] args) { visitPoints = new int[pointNum]; distanse = new int[pointNum]; path = new string[pointNum]; initRectMatrix(); Console.WriteLine("请输入起始点坐标:"); string strPoint = Console.ReadLine(); Console.WriteLine("请输入终点坐标:"); string ePoint = Console.ReadLine(); if (Int32.TryParse(strPoint, out startPoint) && Int32.TryParse(ePoint, out endPoint)) { computePath(startPoint); Console.WriteLine("最佳路径:" + path[endPoint]); Console.WriteLine("最短距离:" + distanse[endPoint]); Console.ReadLine(); } } /// <summary> /// 计算路径 /// </summary> /// <param name="index"></param> private static void computePath(int index) { //设置为1,标记当前点已经遍历 visitPoints[index] = 1; if (isCurIndex(index)) { int curDistanse; for (int i = 0; i < pointNum; i++) { if (i != index && rectMatrix[index, i] != null) { curDistanse = distanse[index] == 0 ? 0 : (int)distanse[index]; if (curDistanse + rectMatrix[index, i] < distanse[i] || distanse[i] == 0) { distanse[i] = curDistanse + (int)rectMatrix[index, i]; if (index == startPoint) { path[i] = startPoint.ToString() + "=>" + i.ToString(); } else { path[i] = path[index].ToString() + "=>" + i.ToString(); computePath(i); } } } } } int visit = getVisitIndex(); if (visit != -1) { computePath(visit); } } /// <summary> /// 得到未访问节点的最小索引 /// </summary> /// <returns></returns> private static int getVisitIndex() { int index=-1; for(int i=0;i<pointNum;i++) { if (visitPoints[i] != 1) { index = i; break; } } return index; } /// <summary> /// 判断当前节点是否与上一节点相连 /// </summary> /// <param name="index"></param> /// <returns></returns> private static bool isCurIndex(int index) { if (index == startPoint ||(path[index] != null && path[index].IndexOf(index.ToString()) != -1)) { return true; } return false; } /// <summary> /// 初始化邻接矩阵 /// </summary> private static void initRectMatrix() { rectMatrix = new int?[pointNum, pointNum]; rectMatrix[0, 1] = 15; rectMatrix[0, 2] = 20; rectMatrix[1, 3] = 30; rectMatrix[1, 2] = 30; rectMatrix[1, 4] = 20; rectMatrix[1, 5] = 30; rectMatrix[2, 3] = 30; rectMatrix[2, 4] = 20; rectMatrix[2, 6] = 30; rectMatrix[3, 5] = 30; rectMatrix[4, 7] = 20; rectMatrix[4, 8] = 30; rectMatrix[5, 6] = 30; rectMatrix[6, 9] = 20; rectMatrix[7, 8] = 30; rectMatrix[7, 9] = 30; rectMatrix[8, 4] = 20; rectMatrix[8, 0] = 30; rectMatrix[8, 3] = 30; rectMatrix[9, 2] = 20; rectMatrix[9, 7] = 30; rectMatrix[9, 6] = 30; for (int i = 0; i < pointNum; i++) { rectMatrix[i, i] = 0; } } } }
相关文章推荐
- PHP根据经纬度计算两点之间距离
- 利用JS实现的根据经纬度计算地球上两点之间的距离
- mysql 下 计算 两点 经纬度 之间的距离(转)
- 百度地图如何计算两点之间距离
- 利用JS实现的根据经纬度计算地球上两点之间的距离
- 如何通过经纬度粗略计算地球两点之间的距离?直接上代码
- mysql 下 计算 两点 经纬度 之间的距离
- hdoj 计算两点之间的距离
- 杭电2001 计算两点之间的距离
- JS实现的根据经纬度计算地球上两点之间的距离
- 计算两点之间的距离(笔记)
- 百度地图API计算坐标两点之间距离与业务实现排序
- mysql 下 计算 两点 经纬度 之间的距离 含具体sql语句
- java计算两点之间的距离的两种方法
- mysql 下 计算 两点 经纬度 之间的距离
- (一)计算两点之间的距离(友元函数)
- 如何计算两点之间的距离
- 两点之间最短的距离并不一定是直线(改变一生财运的五句话)
- mysql 下 计算 两点 经纬度 之间的距离
- php-根据两点的经纬度计算两点之间的距离