单源点最短路径Dijkstra算法的JAVA实现

鸿蒙星

鸿蒙星

2016-02-19 18:58

下面是个超简单的单源点最短路径Dijkstra算法的JAVA实现教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

  在城市智能交通中,经常会用到最短路径的问题,比如找最佳的行车路线等,Dijkstra算法做为最经典的求解方法,为我们指明了方向.不过真正想让我了解该算法的原因是在学习ICTCLAS的N-最短路径算法,虽然和我们常用的案例有一点区别,但基本相同,为了更好的理解N-最短路径算法,我又重新把大学时代的数据结构知识搬了出来。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  在网上找到一篇文章,非常具体生动(有FLASH动画演示)的描述了该算法的实现,不过第一页右下角的图终点那一列2和3弄反了,看的时候要注重 ,具体的算法描述不再赘述,请参考:

  http://student.zjzk.cn/course_ware/data_structure/web/tu/tu7.5.1.htm

  下面给出我的算法实现具体代码,为了更好的验证程序的正确性,在原来的基础上我又多加了几条边

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

  package sinboy.datastrUCture;

  import Java.util.ArrayList;

  public class Dijkstra ...{
      static ArrayListSide map = null;

      static ArrayListInteger redAgg = null;

      static ArrayListInteger blueAgg = null;

      static Side[] parents = null;

      public static void main(String[] args) ...{
          // 初始化顶点集
          int[] nodes = ...{ 0, 1, 3, 2, 4, 5,6 };

          // 初始化有向权重图
          map = new ArrayListSide();
          map.add(new Side(0, 1, 10));
          map.add(new Side(0, 3, 30));
          map.add(new Side(0, 4, 100));
          map.add(new Side(1, 2, 50));
          map.add(new Side(2, 4, 10));
          map.add(new Side(3, 2, 20));
          map.add(new Side(3, 4, 60));
          map.add(new Side(4, 5, 50));
          map.add(new Side(3, 5, 60));
          map.add(new Side(5, 6, 10));
          map.add(new Side(3, 6, 80));

          // 初始化已知最短路径的顶点集,即红点集,只加入顶点0
          redAgg = new ArrayListInteger();
          redAgg.add(nodes[0]);

          // 初始化未知最短路径的顶点集,即蓝点集
          blueAgg = new ArrayListInteger();
          for (int i = 1; i nodes.length; i++)
              blueAgg.add(nodes[i]);

          // 初始化每个顶点在最短路径中的父结点,及它们之间的权重,权重-1表示无连通
          parents = new Side[nodes.length];
  

展开更多 50%)
分享

猜你喜欢

单源点最短路径Dijkstra算法的JAVA实现

编程语言 网络编程
单源点最短路径Dijkstra算法的JAVA实现

最短路径(校园导游)的简单算法

编程语言 网络编程
最短路径(校园导游)的简单算法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

JAVA简单分组的算法实现

编程语言 网络编程
JAVA简单分组的算法实现

用java实现RSA算法

编程语言 网络编程
用java实现RSA算法

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

Java实现数据排序算法

编程语言 网络编程
Java实现数据排序算法

用java实现冒泡排序算法

编程语言 网络编程
用java实现冒泡排序算法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

GridView中利用隐藏的TemplateFied来进行数据访问

GridView中利用隐藏的TemplateFied来进行数据访问

Java 理论与实践:哈希

Java 理论与实践:哈希
下拉加载更多内容 ↓