力扣刷题之旅:进阶篇(六)—— 图论与最短路径问题

++**力扣(LeetCode)**是一个在线编程平台,主要用于帮助程序员提升算法和数据结构方面的能力。以下是一些力扣上的入门题目,以及它们的解题代码。++

--点击进入刷题地址


引言

在算法的广阔天地中,图论是一个非常重要的领域。++图论问题常常涉及到节点之间的连接关系和路径问题,而最短路径问题则是其中的经典之一。++ 今天,我们就来一起探索一道关于图论与最短路径的经典题目:"单源最短路径问题"。

题目描述

给定一个带权有向图 ,图中包含 n 个节点和 m 条边,每条边都有一个权值表示通过这条边所需的花费。现在,我们需要找出从给定起点到其他所有节点的最短路径。

示例

输入:
python 复制代码
图的邻接表表示如下:
3  
3 2  
1 3 4  
2 1 1  
1 2 2

++其中,3 表示节点数量,3 2 表示有 3 条边,第 1 条边的起点是 1,终点是 2,权值是 3;第 2 条边的起点是 1,终点是 3,权值是 4;第 3 条边的起点是 2,终点是 1,权值是 1。++

输出:
python 复制代码
从节点 1 到其他节点的最短路径长度分别为 [0, 3, 4]。

解题思路

  • 为了解决这个问题,++我们可以使用 Dijkstra 算法。Dijkstra 算法是一种用于解决单源最短路径问题的贪心算法。++它的基本思想是从起点开始,逐步向外扩展,不断更新起点到其他节点的最短路径长度。
  • 具体实现时,我们可以使用一个数组 dist 来记录起点到其他节点的最短路径长度,初始时将所有节点的距离都设置为无穷大,除了起点到自身的距离为 0。++然后,我们每次从未被访问的节点中选择一个距离最短的节点,更新其相邻节点的距离。重复这个过程,直到所有节点都被访问过为止。++

代码实现

python 复制代码
import heapq  
  
def dijkstra(graph, start):  
    n = len(graph)  
    dist = [float('inf')] * n  
    dist[start] = 0  
    heap = [(0, start)]  
      
    while heap:  
        curr_dist, curr_node = heapq.heappop(heap)  
          
        if curr_dist > dist[curr_node]:  
            continue  
          
        for neighbor, weight in graph[curr_node].items():  
            new_dist = curr_dist + weight  
            if new_dist < dist[neighbor]:  
                dist[neighbor] = new_dist  
                heapq.heappush(heap, (new_dist, neighbor))  
      
    return dist

新年祝福

++随着这道题目的探索,我们也迎来了新的一年。在这里,我衷心祝愿大家在新的一年里,事业有成,学业进步,身体健康,万事如意!愿你的算法之路越走越宽,不断刷新自己的记录,创造更加辉煌的成就!新年快乐!++

相关推荐
君义_noip6 小时前
信息学奥赛一本通 1661:有趣的数列 | 洛谷 P3200 [HNOI2009] 有趣的数列
c++·算法·组合数学·信息学奥赛·csp-s
程序员:钧念6 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
数据与后端架构提升之路6 小时前
TeleTron 源码揭秘:如何用适配器模式“无缝魔改” Megatron-Core?
人工智能·python·适配器模式
英英_7 小时前
MATLAB数值计算基础教程
数据结构·算法·matlab
一起养小猫7 小时前
LeetCode100天Day14-轮转数组与买卖股票最佳时机
算法·leetcode·职场和发展
hele_two7 小时前
快速幂算法
c++·python·算法
l1t8 小时前
利用DeepSeek将python DLX求解数独程序格式化并改成3.x版本
开发语言·python·算法·数独
jllllyuz8 小时前
基于子集模拟的系统与静态可靠性分析及Matlab优化算法实现
算法·matlab·概率论
程序员-King.9 小时前
day143—递归—对称二叉树(LeetCode-101)
数据结构·算法·leetcode·二叉树·递归
BlockChain8889 小时前
字符串最后一个单词的长度
算法·go