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

++**力扣(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

新年祝福

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

相关推荐
lishi_19911 小时前
一键部署MoviePilotV2实现NAS全自动追剧
python·媒体·moviepilot
AI医影跨模态组学2 小时前
Biomarker Res(IF=11.5)安徽医科大学第一医院:基于机器学习的放射组学模型:子宫内膜癌患者的预后预测及机制探索
人工智能·深度学习·论文·医学·医学影像·影像组学
lqqjuly2 小时前
Transformer架构详解 - 第一、二部分:基础与核心思想、核心组件详解
深度学习·神经网络·自然语言处理
EllinY2 小时前
CF2217E Definitely Larger 题解
c++·笔记·算法·构造
测试开发-学习笔记2 小时前
代码详细解释
python
白日做梦Q3 小时前
Label Studio 安装与使用完整文档(可直接复制部署)
深度学习·yolo·计算机视觉
u0119608233 小时前
ray-k8s部署
python
快乐on9仔4 小时前
NLP学习(一)transformers之pipeline体验
人工智能·深度学习
PAK向日葵5 小时前
我用 C++ 写了一个轻量级 Python 虚拟机,刚刚开源
c++·python·开源