美文网首页
通用的深度优先搜索+图的应用2:最短路径

通用的深度优先搜索+图的应用2:最短路径

作者: 腹黑君 | 来源:发表于2020-06-28 12:17 被阅读0次

问题介绍:

带权图上的最小权重问题,即从一个顶点到另一个顶点的最小权重问题

问题解决方法:

  1. BFS 广度优先搜索(如果没有权重,只计算边的数量,就退化为词梯问题)
  2. Dijkstra算法

算法介绍:

  1. 通过将所有图的顶点放入优先队列中,其中起始顶点设置距离为0,其他顶点设置距离为系统最大值
  2. 将距离最小的顶点出队,更新与出队顶点相连接的各个顶点的距离值(加上权重),更新堆并重排
  3. 重复2的操作,更新堆
  4. 完成所有顶点的出队,此时可输出所有顶点的权重值


    image.png

算法代码如下:

from pythonds.garph import PriorityQueue, Graph, Vertex
def dijkstra(aGraph, start):
    pq = PriorityQueue()
    # 初始节点距离初始化为0
    start.setDistance(0)
    pq.buildHeap([(v.getDistance(), v) for v in aGraph])
    while not pq.isEmpty():
        # 将最小距离的顶点出队列
        currentVert = pq.delMin()
        # 探索该顶点相连的各顶点
        for nextVert in currentVert.getConnections():
            newDist = currentVert.getDistance() + currentVert.getWeight(nextVert)
            if newDist < nextVert.getDistance():
                nextVert.setDistance(newDist)
                nextVert.setPred(currentVert)
                # 将队列中的顶点距离值更新,并重新排列
                pq.decreaseKey(nextVert, newDist)

时间复杂度分析:

image.png

相关文章

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • python数据结构教程 Day16

    本章内容 通用深度优先DFS算法 单源最短路径问题 最小生成树 一、通用深度优先DFS算法 一般的深度优先搜索目标...

  • 通用的深度优先搜索+图的应用2:最短路径

    问题介绍: 带权图上的最小权重问题,即从一个顶点到另一个顶点的最小权重问题 问题解决方法: BFS 广度优先搜索(...

  • [考研]数据结构必考代码

    (十二)图的遍历 深度优先搜索 广度优先搜索 示例: BFS算法求解非带权图单源最短路径算法: (十三)最小生成树...

  • 《算法》笔记 10 - 无向图

    表示无向图的数据结构邻接表数组 深度优先搜索深度优先搜索寻找路径深度优先搜索的性能特点 广度优先搜索 两种搜索方式...

  • 读书打卡 <<算法图解-第六章 广度优先搜索>>

    1.广度优先搜索(BFS)用于解决最短路径问题 2.边(edge)和节点(node)组成图 3.实现广度优先搜索的...

  • 2. 图的遍历算法

    图的遍历算法包括: 1. 深度优先搜索. 2. 广度优先搜索 1. 深度优先搜索 DFS (Depth Firs...

  • 图搜索算法实现

    图的深度优先搜索遍历和广度优先搜索遍历,深度优先搜索借助一个辅助栈实现,一直顺着路径往前走,每次都取出栈顶元素,一...

  • 栈 队列 queue 队列的基本应用:广度优先遍历 树;层序遍历 图;无权图的最短路径 树 二分搜索树:二叉树:

  • 广度优先搜索

    广度优先搜索指出是否有A到B的路径 如果有,广度优先搜索将找出最短的路径面临类似于找最短路径的问题时,可以尝试使用...

网友评论

      本文标题:通用的深度优先搜索+图的应用2:最短路径

      本文链接:https://www.haomeiwen.com/subject/iiiifktx.html