leetcode原题:节点间通路

这篇具有很好参考价值的文章主要介绍了leetcode原题:节点间通路。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目:

给定有向图,设计一个算法,找出两个节点之间是否存在一条路径。

示例:

 输入:n = 3, graph = [[0, 1], [0, 2], [1, 2], [1, 2]], start = 0, target = 2
 输出:true

 解题思路:

本题借助队列,利用队列的先进先出的特点,保证访问每个节点的顺序不被破坏。

1.建立邻接表map,讲每个节点的可达节点保存在它自己的数组中,例如示例:map[0]={1,2}

2.创建访问数组,记录节点是否已经被访问过,防止一个节点多次被访问,出现死循环

3.创建一个队列qq,先在map中是否可以直接到达target,若没有,则将该节点可以到达的其他节点入队,继续找这些节点能到达的节点是否可以到达target

4.在找的过程中,只要找到了target,就说明存在路径,返回true

5.否则,返回false

源代码如下:文章来源地址https://www.toymoban.com/news/detail-647001.html

class Solution {
public:
    bool findWhetherExistsPath(int n, vector<vector<int>>& graph, int start, int target) {
        if(start==target) return true;
        //定义邻接表
        unordered_map<int,vector<int>> map;
        //遍历图,将图中两两节点之间的关系
        //eg.vec[0]={1,2}
        for(auto &vec:graph)
        {
            map[vec[0]].push_back(vec[1]);
        }
        //记录当前节点是否已经访问过,防止出现死循环
        vector<bool> vis(n,false);
        //通过队列使每个顶点能到达的前后顺序不被改变
        queue<int> qq;
        qq.push(start);//将start节点入队
        while(!qq.empty())
        {
            //保存对头元素
            int node=qq.front();
            qq.pop();
            //更新状态:已访问过
            vis[node]=true;
            //查找map,找到target,就说明可以到达
            for(auto point:map[node])
            {
                if(point==target) return true;
                //如果没有找到,需要判断节点是否访问过
                else if(vis[point]==false)
                {
                    //将当前节点入队
                    qq.push(point);//此时point节点相当于最终找到路径中的其中一个节点
                    //当前map[node]找完,没找到target
                    //如果队列不为空,说明路径还没有到达终点,继续找,此时就会找map[point]里的每个节点,直到找到队列为空,如果还没找到,说明不存在从start到target的路径
                }
            }
        }
        return false;
    }
};

到了这里,关于leetcode原题:节点间通路的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode原题:变位词组(哈希)

    题目: 编写一种方法,对字符串数组进行排序,将所有变位词组合在一起。变位词是指字母相同,但排列不同的字符串。 示例: 输入: [\\\"eat\\\", \\\"tea\\\", \\\"tan\\\", \\\"ate\\\", \\\"nat\\\", \\\"bat\\\"], 输出: [   [\\\"ate\\\",\\\"eat\\\",\\\"tea\\\"],   [\\\"nat\\\",\\\"tan\\\"],   [\\\"bat\\\"] ] 解题思路: 本题是需要将相同的变位词放在一维数组中,

    2024年02月11日
    浏览(37)
  • leetcode原题:绘制直线(位运算)

    题目: 已知一个由像素点组成的单色屏幕,每行均有 w 个像素点,所有像素点初始为 0 ,左上角位置为 (0,0) 。 现将每行的像素点按照「每 32 个像素点」为一组存放在一个 int 中,再依次存入长度为 length 的一维数组中。 我们将在屏幕上绘制一条从点 (x1,y) 到点 (x2,y) 的直线(

    2024年02月12日
    浏览(40)
  • leetcode原题: 堆箱子(动态规划实现)

    题目: 给你一堆n个箱子,箱子宽 wi、深 di、高 hi。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一种方法,搭出最高的一堆箱子。箱堆的高度为每个箱子高度的总和。 输入使用数组 [wi, di, hi] 表示每个箱子。 示例:  输入:box

    2024年02月11日
    浏览(44)
  • [职场] 会计学专业学什么 #其他#知识分享#职场发展

    会计学专业学什么 会计学专业属于工商管理学科下的一个二级学科,本专业培养具备财务、管理、经济、法律等方面的知识和能力,具有分析和解决财务、金融问题的基本能力,能在企、事业单位及政府部门从事会计实务以及教学、科研方面工作的工商管理学科高级专门人才

    2024年02月20日
    浏览(49)
  • leetcode原题:颜色填充(经典的递归问题)

    题目: 编写函数,实现许多图片编辑软件都支持的「颜色填充」功能。 待填充的图像用二维数组 image 表示,元素为初始颜色值。初始坐标点的行坐标为 sr 列坐标为 sc。需要填充的新颜色为 newColor 。 「周围区域」是指颜色相同且在上、下、左、右四个方向上存在相连情况的

    2024年02月12日
    浏览(47)
  • 学习平台助力职场发展与提升

    近年来,随着互联网技术的发展, 学习平台 逐渐成为了职场发展和提升的必备工具。学习平台通过提供丰富的课程内容、灵活的学习时间和个性化的学习路径,帮助职场人士更好地提升自己的技能和知识储备,为职场发展打下坚实的基础。 学习平台的优势在于提供了丰富多

    2024年02月11日
    浏览(51)
  • 关于岛屿的三道leetcode原题:岛屿周长、岛屿数量、统计子岛屿

    题1: 岛屿周长 给定一个 row x col 的二维网格地图 grid ,其中:gridi = 1 表示陆地, gridi = 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。 岛屿

    2024年02月10日
    浏览(52)
  • 如何手机搜学法减分答案? #媒体#职场发展

    今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.证件照全能管家(APP) 一个非常好用的证件照APP 常用的证件照尺寸和底色都有、日常的证件照编辑完全够用,支持一键智能拍摄证件照,还可以对照片

    2024年02月19日
    浏览(47)
  • 【数据结构和算法】删除链表的中间节点

    Java基础合集 数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 三、代码 四、复杂度分析 这是力扣的 2095 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。 慢慢开始链表的模块了

    2024年01月19日
    浏览(77)
  • leetcode原题 一次编辑(判定字符串是否只需要一次(或者零次)编辑)

    题目: 字符串有三种编辑操作:插入一个英文字符、删除一个英文字符或者替换一个英文字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。 输入:  first = \\\"pale\\\" second = \\\"ple\\\" 输出: True 解题思路: 本题可以分为以下几种情况来处理: 1. 两个字符串长

    2024年02月13日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包