LeetCode 面试题 04.01. 节点间通路

news/2025/3/5 0:16:26/

文章目录

  • 一、题目
  • 二、C# 题解

一、题目

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

  点击此处跳转题目。

示例1:

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

示例2:

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

提示:

  • 节点数量n在[0, 105]范围内。
  • 节点编号大于等于 0 小于 n。
  • 图中可能存在自环和平行边。

二、C# 题解

  使用BFS方法寻找通路,代码如下:

public class Solution {public bool FindWhetherExistsPath(int n, int[][] graph, int start, int target) {// 建立邻接表Dictionary<int, List<int>> dic = new Dictionary<int, List<int>>();for (int i = 0; i < graph.Length; i++) {int p = graph[i][0], q = graph[i][1];if (dic.ContainsKey(p) && !dic[p].Contains(q)) dic[p].Add(q);else dic[p] = new List<int> {q};}// BFSQueue<int> queue = new Queue<int>();queue.Enqueue(start);do {int node = queue.Dequeue();               // 取出结点if (node == target) return true;          // 判断是否为目标对象if (!dic.ContainsKey(node)) continue;     // 如果邻接表不存在该结点,则直接跳过for (int i = 0; i < dic[node].Count; i++) // 遍历邻接表,继续找后续节点queue.Enqueue(dic[node][i]);dic.Remove(node);                         // 访问过该结点,因此从邻接表中删除记录} while (queue.Count != 0);return false;}
}
  • 时间复杂度: O ( n + e ) O(n+e) O(n+e),其中 e e e 为有向图的边数。
  • 空间复杂度: O ( n ) O(n) O(n)

http://www.ppmy.cn/news/1100751.html

相关文章

VMware的三种连接模式

目录 目录 前言 系列文章列表 思维导图 1&#xff0c;VMware是什么? 2&#xff0c;VMware的连接模式 2.1,VMware的连接模式是什么? 2.2, VMware的连接模式的分类 3&#xff0c;桥接模式 3.1,图示介绍 3.2,详细介绍 3.3,注意点 4.NAT模式 4.1,NAT协议 4.2,图示…

OpenCV 11(图像金字塔)

一、 图像金字塔 **图像金字塔**是图像中多尺度表达的一种&#xff0c;最主要用于图像的分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说, 图像金字塔是同一图像不同分辨率的子图集合. 图像金字塔最初用于机器视觉和图像压缩。其通过梯次向下采…

Matlab图像处理-多阈值分割

多阈值分割 在某些时候图像使用单独的阈值不能够对其实现有效地分割&#xff0c;例如在灰度直方图中有明显的三个峰时候&#xff0c;我们需要提取中间峰&#xff0c;这时我们使用双阈值分割会得到较好的分割效果。如下例子中生成灰度直方图中有两个峰&#xff0c;选择合适的两…

66.C++多态与虚函数

目录 1.什么是多态 2.多态的分类 3.对象转型 3.1 向上转型&#xff1a; 3.2 向下转型&#xff1a; 4.虚函数 1.什么是多态 生活中的多态&#xff0c;是指的客观的事物在人脑中的主观体现。例如&#xff0c;在路上看到⼀只哈士奇&#xff0c;你可以看做是哈士奇&#xf…

迄今为止最完整的DDD实践

作者&#xff1a;章磊(章三) 阿里飞猪技术团队 一、为什么需要DDD 对于一个架构师来说&#xff0c;在软件开发中如何降低系统复杂度是一个永恒的挑战。 复杂系统设计&#xff1a; 系统多&#xff0c;业务逻辑复杂&#xff0c;概念不清晰&#xff0c;有什么合适的方法帮助我们…

猫头虎的技术笔记:Spring Boot启动报错解决方案

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

数学建模国赛C蔬菜类商品的自动定价与补货决策C

数学建模国赛C蔬菜类商品的自动定价与补货决策C 完整思路和代码请私信~~~ 1.拟解决问题 这是一个关于生鲜商超蔬菜商品管理的复杂问题&#xff0c;需要综合考虑销售、补货、定价等多个方面。以下是对这些问题的总结&#xff1a; 问题 1: 蔬菜销售分析 需要分析蔬菜各品类和…

Golang基本的网络编程

Go语言基本的Web服务器实现 Go 语言中的 http 包提供了创建 http 服务或者访问 http 服务所需要的能力&#xff0c;不需要额外的依赖。 Go语言在Web服务器中主要使用到了 “net/http” 库函数&#xff0c;通过分析请求的URL来实现参数的接收。 下面介绍了http 中Web应用的基本…