当前位置: 首页 > article >正文

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

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

--点击进入刷题地址 


引言 

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

题目描述

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

示例

输入:
图的邻接表表示如下:
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。

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

解题思路

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

代码实现

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

新年祝福

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


http://www.kler.cn/a/234519.html

相关文章:

  • 字节跳动核心技术:TT推荐系统从0-1落地应用
  • 案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索
  • 十九:Spring Boot 依赖(4)-- spring-boot-starter-security依赖详解
  • AI大模型开发架构设计(14)——基于LangChain大模型的案例架构实战
  • UI资源分包 -- 基于Xasset框架代码实例
  • 【大数据学习 | kafka高级部分】kafka的kraft集群
  • 网络的基本概念和socket编程
  • java 类加载过程
  • Vulnhub靶机:hacksudo-search
  • Java实现数据可视化的智慧河南大屏 JAVA+Vue+SpringBoot+MySQL
  • 踩坑实录(Second Day)
  • 789. 数的范围(二分模板)
  • ShardingSphere实现openGauss分布式架构
  • 夜天之书 #95 GreptimeDB 社群观察报告
  • 零代码3D可视化快速开发平台
  • 【射影几何15】python双曲几何工具geometry_tools
  • 【Opencv学习】04-图像加法
  • QGIS编译(跨平台编译)之四十九:cairo编译(Windows、Linux、MacOS环境下编译)
  • 基于springboot会员制医疗预约服务管理信息系统源码和论文
  • vue3学习——router-view 过渡动画
  • visual studio code could not establish connection to *: XHR failed
  • GreenSock Animation Platform(GSAP)动画库插件介绍
  • [C#] 如何使用ScottPlot.WPF在WPF桌面程序中绘制图表
  • Nginx配置php留档
  • C++ bool 布尔类型
  • opencv 图像色彩空间转化