节点间通路

news2024/11/26 12:26:28

题目链接

节点间通路

题目描述

注意点

  • 图是有向图
  • 节点编号大于等于 0 小于 n
  • 图中可能存在自环和平行边

解答思路

  • 初始想到的是使用广度优先遍历,从start开始,存储每个点所能到达的其他节点集合,直到到达target或者不能到达新的节点为止,需要注意的是,图中可能存在自环和平行边,所以还需要使用一个visited数组存储已经到达过的节点,防止死循环,但是最终还是超时了
  • 注意到在广度优先遍历的过程中寻找每个节点所能到达的相邻节点每次都需要从前往后遍历整个graph数组,这是相当耗时的,为了减少这个过程,使用map存储每个节点所能到达的相邻节点,并且初始就遍历一次graph将map初始化,后续只需要根据map广度寻找每次所能到达的节点即可

代码

class Solution {
    public boolean findWhetherExistsPath(int n, int[][] graph, int start, int target) {
        // 存储点对应的有向边
        Map<Integer, List<Integer>> map = new HashMap<>(n);
        for (int i = 0; i < graph.length; i++) {
            if (map.get(graph[i][0]) == null) {
                List<Integer> list = new ArrayList<>();
                list.add(graph[i][1]);
                map.put(graph[i][0], list);
            } else {
                map.get(graph[i][0]).add(graph[i][1]);
            }
        }
        boolean[] visited = new boolean[graph.length];
        Deque<Integer> dq = new ArrayDeque<>();
        dq.offerLast(start);
        visited[start] = true;
        while (!dq.isEmpty()) {
            int node1 = dq.pollFirst();
            if (map.get(node1) == null) {
                continue;
            }
            for (int node2 : map.get(node1)) {
                if (node2 == target) {
                    return true;
                }
                if (visited[node2]) {
                    continue;
                }
                dq.offerLast(node2);
                visited[node2] = true;
            }
        }
        return false;
    }
}

关键点

  • 广度优先遍历的思想
  • 使用visited数组存储哪些节点已经到达过
  • 使用map存储每个节点所能到达的相邻节点

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux-桌面操作系统在服务器上未关闭休眠机制,使其开机半小时左右死机无法远程ssh连接

故障表述 操作系统:ubuntu desktop 18.04 异常描述:开机半小时左右死机 1、登录iBMC查看硬件无异常 2、登录ubuntu desktop 18.04操作系统,导出日志文件syslog、dmesg、lastlog(路径:/var/log),操作系统在11月8号~11月9号之间出现异常 经分析操作系统日志文件,操作系…

【重磅开源】MapleBoot权限控制使用介绍(菜单权限、按钮权限、数据权限)

基于SpringBootVue3开发的轻量级快速开发脚手架 ## &#x1f341;项目简介 一个通用的前、后端项目模板 一个快速开发管理系统的项目 一个可以生成SpringBootVue代码的项目 一个持续迭代的开源项目 一个程序员的心血合集 度过严寒&#xff0c;终有春日&#…

电脑ip地址查询:快速定位你的网络位置(4种方法)

在互联网的浩瀚海洋中&#xff0c;每台联网的电脑都有一个独特的身份标识&#xff0c;那就是IP地址。无论是进行网络通信、定位问题还是安全防护&#xff0c;了解自己或他人的电脑IP地址都是非常关键的。那么&#xff0c;电脑ip地址查询怎么操作呢&#xff1f;本文将为你提供一…

618网购节,电商能挡住恶意网络爬虫的攻击吗?

目录 爬虫盗取电商数据的步骤 电商平台如何发现网络爬虫&#xff1f; 如何拦截违法网络爬虫 2023年&#xff0c;杭州中院审结了两起涉及“搬店软件”的不正当竞争案件。本案的原告是国内某大型知名电子商务平台的运营主体&#xff0c;而被告则是开发了一款名为“某搬家快速商品…

个股场外期权个人如何参与买卖?

个股场外期权作为一种金融衍生品&#xff0c;为个人投资者提供了多样化的投资选择和风险管理工具。想要参与个股场外期权的买卖&#xff0c;以下是一些关键步骤和考虑因素。 文章来源/&#xff1a;财智财经 第一步&#xff1a;选择合适的金融机构 首先&#xff0c;个人投资者需…

动手学深度学习28 批量归一化

动手学深度学习28 批量归一化 批量归一化代码从零实现调包简洁实现 QA https://www.bilibili.com/video/BV1X44y1r77r/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 批量归一化 n个比较小的数相乘&#xff0c;值会越来越小。 批量归一化&#xff1a;…

React+TS前台项目实战(一)-- 项目初始化配置及开此系列的初衷

文章目录 前言一、初始化项目二、基础配置1. 项目目录及说明如下2. TS版本使用Craco需注意 总结 前言 前面 后台管理系统实战 系列教程暂时告一段落了&#xff0c;想了解全局各种配置的可自行查看。本次教程将重点介绍React前台项目的实操&#xff0c;关于具体的配置&#xff…

企业微信hook接口协议,ipad协议http,发送CDN语音消息

发送CDN语音消息 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信send_userid是long要发送的人或群idisRoom是bool是否是群消息 请求示例 {"uuid":"1753cdff-0501-42fe-bb5a-2a4b9629f7fb","send_userid&q…

耐用好用充电宝有哪些?畅销排行榜前四款充电宝推荐

在日常生活中&#xff0c;一款耐用且好用的充电宝是我们出行必备的利器&#xff0c;它可以为我们的手机、平板等设备提供持续的电力支持。然而&#xff0c;在市面上琳琅满目的充电宝品牌中&#xff0c;究竟哪些才是真正耐用又好用的选择&#xff1f;为了帮助大家更好地了解市场…

MYSQL基础_01_数据库概述

第01章_数据库概述 1. 为什么要使用数据库 持久化(persistence)&#xff1a;把数据保存到可掉电式存储设备中以供之后使用。大多数情况下&#xff0c;特别是企业级应用&#xff0c;数据持久化意味着将内存中的数据保存到硬盘上加以”固化”&#xff0c;而持久化的实现过程大多…

国产低功率立体声音频编解码器CJC8988Pin to Pin替代WM8988

CJC8988是一个低功率&#xff0c;高质量的立体声编解码器&#xff0c;和WM8988外围电路一致&#xff0c;管脚兼容&#xff1b;可以直接Pin to Pin替代WM8988&#xff0c;CJC8988是参考WM8988设计的&#xff0c;芯片可以直接替换&#xff1b;IIC格式一致&#xff0c;寄存器定义一…

笔记-Python pip配置国内源

众所周知&#xff0c;Python使用pip方法安装第三方包时&#xff0c;需要从 https://pypi.org/ 资源库中下载&#xff0c;但是会面临下载速度慢&#xff0c;甚至无法下载的尴尬&#xff0c;这时&#xff0c;你就需要知道配置一个国内源有多么重要了&#xff0c;通过一番摸索和尝…

Django里的Form组件

Form组件提供 自动生成HTML标签和半自动读取关联数据 (“半自动”是指还得需要自己手写输入数据进来)表单验证和错误提示 要想创建并使用该组件&#xff0c;操作步骤如下&#xff1a; 在 views.py 里创建类 # 在 views.py 文件里from django import formsclass AssetForm(fo…

杭州威雅学校2024-25学年招生简章

杭州市新学年招生政策现已公布&#xff0c;杭州威雅学校小学部、初中部招生工作全面开启。 招生简章与报名流程如下&#xff1a; Part.1 幼升小 01 招生对象 2017年9月1日至2018年8月31日出生满六周岁且符合杭州市萧山区小学招生条件的适龄儿童。 02 招生人数 新一年级…

CAPL如何发送一条UDP报文

UDP作为传输层协议,本身并不具有可靠性传输特点,所以不需要建立连接通道,可以直接发送数据。当然,前提是需要知道对方的通信端点,也就是IP地址和端口号。 端口号是传输层协议中最显著的特征,传输层根据它来确定上层绑定的应用程序,以达到把数据交给上层应用处理的目的。…

vsCode双击文件才能打开文件,单击文件只能预览?

解决&#xff1a; 1、打开设置 2、搜索workbench.editor.enablePreview 3、更改为不勾选状态 4、关闭设置 效果&#xff1a; 现在单击一个文件时&#xff0c;将会在编辑器中直接打开&#xff0c;而非是预览状态。

Flink SQL实践

环境准备 方式1&#xff1a;基于Standalone Flink集群的SQL Client 启动hadoop集群 [hadoopnode2 ~]$ start-cluster.sh [hadoopnode2 ~]$ sql-client.sh 使用Yarn Session启动Flink集群 [hadoopnode2 ~]$ start-cluster.sh [hadoopnode2 ~]$ sql-client.sh ... 省略若干…

2.Rust自动生成文件解析

目录 一、生成目录解析二、生成文件解析2.1 Cargo.toml2.2 main函数解析 一、生成目录解析 先使用cargo clean命令删除所有生成的文件&#xff0c;下图显示了目录结构和 main.rs文件 使用cargo new testrust时自动创建出名为testrust的Rust项目。内部主要包含一个src的源码文…

Unity开发——编辑器打包、3种方式加载AssetBundle资源

一、创建ab资源 &#xff08;一&#xff09;Unity资源设置ab格式 1、选中要打包成assetbundle的资源&#xff1b; 可以是图片&#xff0c;材质球&#xff0c;预制体等&#xff0c;这里方便展示用预制体打包设置展示&#xff1b; 2、AssetBundle面板说明 &#xff08;1&…

Android Uri转File path路径,Kotlin

Android Uri转File path路径&#xff0c;Kotlin /*** URI转化为file path路径*/private fun getFilePathFromURI(context: Context, contentURI: Uri): String? {val result: String?var cursor: Cursor? nulltry {cursor context.contentResolver.query(contentURI, null…