力扣刷题之旅:高阶篇(三)—— 图算法的挑战

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

--点击进入刷题地址 


引言

        在算法世界的深处,图算法犹如一座高峰,等待着勇者的攀登。在力扣(LeetCode)平台上,图算法题目以其独特的复杂性和挑战性,吸引了无数算法爱好者的目光。今天,我们将一起探讨图算法的魅力,并通过一道题目来体验其深度。

一、图算法简介

  •         图算法是处理图形结构数据的一种算法,广泛应用于社交网络、搜索引擎、路径规划等领域在图算法中,我们通常使用节点(Vertex)和边(Edge)来表示图形结构,并通过遍历、搜索、优化等手段来解决问题。

二、力扣上的图算法题目

  • 题目:“克隆图”
  •         给定一个无向连通图,图中包含节点和边,每个节点都有一个唯一的标识符节点标识符的范围是 1 到 n(n 是图中节点的数量)图中的每条边都由两个不同节点的标识符表示。
  •         给定一个图的根节点,你需要克隆这个图,并返回克隆图的根节点。图中的每个节点都需要包含其原始图中的所有边,以及这些边指向的节点(即克隆图中的对应节点)。

示例:

输入:
{  
  "$id": "1",  
  "neighbors": [2,3]  
}  
{  
  "$id": "2",  
  "neighbors": [3,1]  
}  
{  
  "$id": "3",  
  "neighbors": [1,2]  
}
输出:
{  
  "$id": "1",  
  "neighbors": [2,3]  
}  
{  
  "$id": "2",  
  "neighbors": [3,1]  
}  
{  
  "$id": "3",  
  "neighbors": [1,2]  
}
解释:
  • 图由三个节点和三条边组成。
  • 节点 1标识符 1,它的邻居是节点 2 和节点 3
  • 节点 2标识符 2,它的邻居是节点 3 和节点 1
  • 节点 3标识符 3,它的邻居是节点 1 和节点 2

三、解题代码

  •         为了解决这个问题,我们可以使用深度优先搜索(DFS)来遍历原始图,并在遍历过程中构建克隆图。我们可以使用一个哈希表来存储原始节点和克隆节点之间的映射关系,以便在构建克隆图时能够正确地连接节点。
以下是使用Python编写的解题代码:
class Node:  
    def __init__(self, val=0, neighbors=[]):  
        self.val = val  
        self.neighbors = neighbors  
  
def cloneGraph(node):  
    if not node:  
        return None  
      
    # 哈希表用于存储原始节点和克隆节点之间的映射关系  
    node_map = {}  
      
    def dfs(original_node):  
        # 如果原始节点已经在哈希表中,则直接返回对应的克隆节点  
        if original_node in node_map:  
            return node_map[original_node]  
          
        # 创建克隆节点  
        cloned_node = Node(original_node.val, [])  
          
        # 将原始节点和克隆节点添加到哈希表中  
        node_map[original_node] = cloned_node  
          
        # 遍历原始节点的邻居,并递归地创建克隆节点的邻居  
        for neighbor in original_node.neighbors:  
            cloned_node.neighbors.append(dfs(neighbor))  
          
        return cloned_node  
      
    # 从根节点开始深度优先搜索  
    return dfs(node)

四、总结

  •         图算法作为算法领域的一个重要分支,具有广泛的应用和深远的意义。通过克隆图这道题目,我们深入体验了图算法的挑战性和趣味性。在解题过程中,我们使用了深度优先搜索哈希表等技巧,成功地构建了克隆图。这不仅锻炼了我们的算法设计能力,也提升了我们对图算法的理解和应用能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/384756.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于大语言模型的AI Agents

代理(Agent)指能自主感知环境并采取行动实现目标的智能体。基于大语言模型(LLM)的 AI Agent 利用 LLM 进行记忆检索、决策推理和行动顺序选择等,把Agent的智能程度提升到了新的高度。LLM驱动的Agent具体是怎么做的呢&a…

Halcon 频域缺陷检测

文章目录 傅里叶变换频谱矩形圆菱形黑白相间的亮带去除图纹(反傅里叶变换)去除图纹滤波器处理 Halcon 频域空间域检测缺陷Halcon 频域差分空间域 缺陷检测(lines_gauss 提取线)Halcon 频域差分空间域(blob特征&#xf…

C++实现二分查找

目录 例1 例2 例3 例4 例5 例6 例1 704. 二分查找 注意&#xff1a; ①left < right,这里的号是最后一次通过下标mid来判断 ②在偶数的时候mid&#xff0c;左右无所谓&#xff0c;因为left和right都有1&#xff1b; 参考代码 class Solution { public:int search…

【selenium】

selenium是一个Web的自动化测试工具&#xff0c;最初是为网站自动化测试而开发的。Selenium可以直接调用浏览器&#xff0c;它支持所有主流的浏览器。其本质是通过驱动浏览器&#xff0c;完成模拟浏览器操作&#xff0c;比如挑战&#xff0c;输入&#xff0c;点击等。 下载与打…

C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(2)折线图显示

对上一篇的工作C学习笔记 | 基于Qt框架开发实时成绩显示排序系统1-CSDN博客继续优化&#xff0c;增加一个显示运动员每组成绩的折线图。 1&#xff09;在Qt Creator的项目文件&#xff08;.pro文件&#xff09;中添加对Qt Charts模块的支持&#xff1a; QT charts 2&#xf…

用HTML5 + JavaScript绘制花、树

用HTML5 JavaScript绘制花、树 <canvas>是一个可以使用脚本 (通常为JavaScript) 来绘制图形的 HTML 元素。 <canvas> 标签/元素只是图形容器&#xff0c;必须使用脚本来绘制图形。 HTML5 canvas 图形标签基础https://blog.csdn.net/cnds123/article/details/112…

opencv 图像色彩空间转化

今天看了b站贾志刚的课&#xff0c;觉得不错&#xff0c;特地做学习笔记来和小伙伴分享 贾志刚的这个好像是2.0版本,30小时的,语言更加精炼,适合初级入门学习 第一节是常规安装 看他的步骤装就行了,记得配置完点应用再点确定,我第一次就是 没点然后就失败了,又得重配置一次…

服务网格(Service Mesh)流行工具

在这篇博客中&#xff0c;我们将介绍微服务的最佳服务网格工具列表&#xff0c;这些工具提供安全性、金丝雀部署、遥测、负载均衡等。 用于部署和操作微服务的服务网格工具的数量不断增加。在这篇文章中&#xff0c;我们将探讨您应该用来构建自己的服务网格架构的顶级服务网格…

视觉开发板—K210自学笔记(五)

本期我们来遵循其他单片机的学习路线开始去用板子上的按键控制点亮LED。那么第一步还是先知道K210里面的硬件电路是怎么连接的&#xff0c;需要查看第二节的文档&#xff0c;看看开发板原理图到底是按键是跟哪个IO连在一起。然后再建立输入按键和GPIO的映射就可以开始变成了。 …

PHP特性知识点总结

description: 专门出的关于php的特性比较,后面好像也有java的特性。 大家直接去我的gitbook或者github看就能看到图片,这里就懒得把他弄到csdn上了。 这里放github和gitbook的链接,大家跳转就可以。gitbook链接用国内的网就能访问。 gitbook: http://22kaka.fun github:htt…

STM32 + ESP8266,连接阿里云 上报/订阅数据

&#xff08;文章正在编辑中&#xff0c;一点点地截图操作过程&#xff0c;估计要拖拉两三天&#xff09; 一、烧录MQTT固件 ESP8266出厂时&#xff0c;默认是AT固件。连接阿里云&#xff0c;需要使用MQTT固件。 1、独立EPS8266模块的烧录方法 2、魔女开发板&#xff0c;板载…

HTTP协议-请求Request

前言&#xff1a; 序列&#xff1a;HTTP - 002 1.请求格式 1.1标椎格式 HTTP请求是字符串的格式传输&#xff0c;具体包含以下四部分&#xff1a; 首行&#xff1a;[方法][url][版本号]&#xff0c;分别使用空格分隔&#xff1b;请求头&#xff08;Header&#xff09;&#…

apk反编译修改教程系列---简单修改apk默认横竖屏显示 手机端与电脑端同步演示【十一】

往期教程&#xff1a; apk反编译修改教程系列-----修改apk应用名称 任意修改名称 签名【一】 apk反编译修改教程系列-----任意修改apk版本号 版本名 防止自动更新【二】 apk反编译修改教程系列-----修改apk中的图片 任意更换apk桌面图片【三】 apk反编译修改教程系列---简单…

《UE5_C++多人TPS完整教程》学习笔记8 ——《P9 访问 Steam(Acessing Steam)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P9 访问 Steam&#xff08;Acessing Steam&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者&…

[JavaWeb玩耍日记]Maven的安装与使用

目录 一.作用 二.安装 三.使用 2.对项目使用compile命令进行编译,看看新的文件会在哪里产生&#xff1f; 3.需要认识的命令 4.Maven对项目执行不同命令的生命周期特点&#xff1f; 5.如何导入工程外的Maven&#xff1f; 6.如何直观地查看Maven导入了哪些工程或哪些jar包…

Stream流学习笔记

Stream流 创建流中间操作1、filter2、map3、distinct4、sorted5、limit6、skip7、flatMap 终结操作1、forEach2、count3、max&min4、collect5、查找与匹配 创建流 单例集合&#xff1a;集合对象.stream() List<Integer> list new ArrayList<>(); Stream<…

前端JavaScript篇之Promise解决了什么问题、Promise.all和Promise.race的区别的使用场景

目录 Promise解决了什么问题Promise.all和Promise.race的区别的使用场景 Promise解决了什么问题 Promise 解决了 JavaScript 中回调地狱的问题。在传统的回调函数中&#xff0c;如果需要依次执行多个异步操作&#xff0c;就需要使用嵌套的回调函数&#xff0c;这样会导致代码难…

如何学习VBA_3.2.14:VBA中字符串的处理和判断函数

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

EasyCaptcha,开源图形验证码新标杆!

引言&#xff1a; 随着互联网的普及&#xff0c;验证码已成为网站和应用程序中不可或缺的安全组件。它能够有效地防止自动化攻击、垃圾邮件和机器人活动。在众多验证码解决方案中&#xff0c;Easy-captcha以其简单易用和高度可定制的特点受到了开发者的青睐。本文将指导读者如…

leetcode:买卖股票最佳时机二

思路&#xff1a; 使用贪心算法&#xff1a;局部最优是将买卖过程中产生的正数进行相加&#xff0c;进而使得最后结果最大&#xff08;全局最优&#xff09;。 price [7,1,5,10,3,6,4] -6,4,5,-7,3,-2 正数相加就得到了最大 代码实现&#xff1a; 1.循环中下标从1开始 …