Dijkstra算法初步学习(Java代码实现)(一)

本文介绍了图的概念,包括无向图和有向图,然后详细讲解了无向图的Dijkstra算法,包括思路、代码实现、运行结果和过程分析。通过一个具体的9×9邻接矩阵例子,阐述了算法的每一步操作,最后展示了从1节点到5节点的最短路径寻找过程。
摘要由CSDN通过智能技术生成

1. 关于图

什么是图?

图是表示各种关系的 节点 的集合:

  • 节点 是与对象对应的顶点;
  • 是对象之间的连接;
  • 图的边有时会有 权重,表示节点之间的连接的强度(或一些其他属性)。

以下内容纯属自己理解:

1.1 无向图

没有方向的图,比如图1:

在这里插入图片描述

连接两个节点之间的边,设置了权重。因为是要探索Dijkstra算法,所以可以将这个权重直接理解为点到点之间的距离大小。

另外注意:

  • 0节点1节点 的直接距离为 4,那么同时 1节点0节点 的直接距离也为 4。0节点 与 1节点 直接双向互通,不论从谁直接到谁距离都相同。

  • 假设没有直接相连的连个节点间不能直接互达,设置距离为∞;

  • 自己到自己的距离当然为0。

这里我们就可以设置一个 9 × 9 的 邻接矩阵 来表示互相之间的距离。

注意:m行n列对应的数值 代表 m节点n节点 之间的距离

对应图1设置邻接矩阵如下:

//定义整数类型的正无穷
//Integer biggest = Integer.MAX_VALUE报出warning:Type may be primitive
//意思是类型可以是基本类型,所以将 biggest 的类型从 Integer 改为 int
int biggest = Integer.MAX_VALUE;

int[][] graph = new int[][]{
   
    //0号节点到其它各个节点的距离
	{
   0, 4, biggest, biggest, biggest, biggest, biggest, 8, biggest}, 
    
    //1号节点到其它各个节点的距离
	{
   4, 0, 8, biggest, biggest, biggest, biggest, 3, biggest},
    
    //2号节点到其它各个节点的距离
    {
   biggest, 8, 0, 7, biggest, 4, biggest, biggest, 2},
    
    //3号节点到其它各个节点的距离
    {
   biggest, biggest, 7, 0, 9, 14, biggest, biggest, biggest},
    
    //4号节点到其它各个节点的距离
    {
   biggest, biggest, biggest, 9, 0, 10, biggest, biggest, biggest},
    
    //5号节点到其它各个节点的距离
    {
   biggest, biggest, 4, 14, 10, 0, 2, biggest, biggest},
    
    //6号节点到其它各个节点的距离
    {
   biggest, biggest, biggest, biggest, biggest, 2, 0, 6, 6},
    
    //7号节点到其它各个节点的距离
    {
   8, 3, biggest, biggest, biggest, biggest, 6, 0, 1},
    
    //8号节点到其它各个节点的距离
    {
   biggest, biggest, 2, biggest, biggest, biggest, 6, 1, 0}
};

1.2 有向图

有向图 的边带有方向。比如下面图2:

在这里插入图片描述

注意:1节点 能够直接到达 4节点,然而从 4节点 却不能直接到达 1节点(但是有可能可以间接到达)。

0节点7节点 的距离为 8,而此时从 7节点 回到 0节点 的距离则为 12。

可以理解为:

从起点去终点时,道路畅通,距离为8;想从终点回到起点时,却发现前方路段施工,那当然就需要绕行了,距离变为了12。(当然也可能是去终点时施工,回起点时畅通。)

那么根据图2,设置邻接矩阵为:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值