LeetCode_DFS_困难_1377.T 秒后青蛙的位置
目录
- 1.题目
- 2.思路
- 3.代码实现(Java)
1.题目
给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下:
- 在一秒内,青蛙从它所在的当前顶点跳到另一个未访问过的顶点(如果它们直接相连)。
- 青蛙无法跳回已经访问过的顶点。
- 如果青蛙可以跳到多个不同顶点,那么它跳到其中任意一个顶点上的机率都相同。
- 如果青蛙不能跳到任何未访问过的顶点上,那么它每次跳跃都会停留在原地。无向树的边用数组 edges 描述,其中 edges[i] = [ai, bi] 意味着存在一条直接连通 ai 和 bi 两个顶点的边。
返回青蛙在 t 秒后位于目标顶点 target 上的概率。与实际答案相差不超过 10-5 的结果将被视为正确答案。
示例 1:

输入:n = 7, edges = [[1,2],[1,3],[1,7],[2,4],[2,6],[3,5]], t = 2, target = 4
输出:0.16666666666666666
解释:上图显示了青蛙的跳跃路径。青蛙从顶点 1 起跳,第 1 秒 有 1/3 的概率跳到顶点 2 ,然后第 2 秒 有 1/2 的概率跳到顶点 4,因此青蛙在 2 秒后位于顶点 4 的概率是 1/3 * 1/2 = 1/6 = 0.16666666666666666 。
示例 2:

输入:n = 7, edges = [[1,2],[1,3],[1,7],[2,4],[2,6],[3,5]], t = 1, target = 7
输出:0.3333333333333333
解释:上图显示了青蛙的跳跃路径。青蛙从顶点 1 起跳,有 1/3 = 0.3333333333333333 的概率能够 1 秒 后跳到顶点 7 。
提示:
1 <= n <= 100
edges.length == n - 1
edges[i].length == 2
1 <= ai, bi <= n
1 <= t <= 50
1 <= target <= n
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/frog-position-after-t-seconds
2.思路
(1)DFS
思路参考本题官方题解。
- 为了方便我们对图进行搜索,先根据 edges 构造出无向树的邻接表
graph,并且定义数组visited来标记节点是否已经被遍历过 - 然后使用 dfs 来进行深度遍历,其中,dfs 的参数包括:
- 邻接表
graph、数组visited; - 当前遍历的顶点序号 i、剩余时间 restTime,以及目标顶点编号 target;
- 邻接表
- 每次遍历一个节点时候:
- 如果当前节点没有后续节点,或者剩余时间为 0,则不能继续搜索;此时当前节点是 target,返回概率 1.0,否则返回概率为 0.0
- 如果有后续节点,并且剩余时间不为 0,则继续深度优先搜索,如果有子节点返回概率 p > 0,说明已经找到了节点 target,又因为跳到任意一个后续子节点上的机率都相同, 我们返回概率 p 除以后续节点个数的商,作为最后的结果。
3.代码实现(Java)
//思路1————DFS
class Solution {public double frogPosition(int n, int[][] edges, int t, int target) {//创建邻接表 graphList<Integer>[] graph = new ArrayList[n + 1];for (int i = 1; i <= n; i++) {graph[i] = new ArrayList<>();}for (int[] edge : edges) {graph[edge[0]].add(edge[1]);graph[edge[1]].add(edge[0]);}boolean[] visited = new boolean[n + 1];return dfs(graph, visited, 1, t, target);}//返回从节点 i 开始,在剩余时间为 restTime 秒后位于目标节点 target 的概率private double dfs(List<Integer>[] graph, boolean[] visited, int i, int restTime, int target) {int next = (i == 1) ? graph[i].size() : graph[i].size() - 1;//剩余时间不足或者当前节点没有后续节点if (restTime == 0 || next == 0) {return i == target ? 1.0 : 0.0;}visited[i] = true;double res = 0.0;for (int j : graph[i]) {if (!visited[j]) {res += dfs(graph, visited, j, restTime - 1, target);}}return res / next;}
}
相关文章:
LeetCode_DFS_困难_1377.T 秒后青蛙的位置
目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下: 在一秒内,青蛙从它所在的当前顶点跳到另一个未访问过的顶点(如果它…...
第四十九天学习记录:C语言进阶:结构体
结构体 结构体的声明 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量 struct tag {member-list; }variable-list;问:C的new和C语言的结构体有什么异同? ChatAI答: C中的new是一个运算符ÿ…...
LeeCode [N字形变换]算法解析
关键字:数学归纳法 一、题目 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: P A H N A P L S I I G Y I R …...
CPU性能提升:流水线
一条指令的执行一般要经过取指令,翻译指令,执行指令3个基本流程。CPU内部的电路分为不同的单元,取指但愿,译码单元,执行单元等。指令的执行也是按照流水线工序一步步执行的。如图2-34所示,我们假设每一个步…...
C语言指针初级
目录 一、什么是指针 二、指针和指针类型 三、野指针 1.野指针的成因: 2.如何规避野指针 四、指针运算 1.指针-整数 2. 指针之间的加减 五、二级指针 六、指针数组 一个男人,到底要走多少的路,才能成为一个真正的男人 本专栏适用于…...
C++的历史
C是一种广泛使用的编程语言。C于1983年由丹尼斯里奇(Dennis Ritchie)在贝尔实验室创造,它是C语言的扩展。C的设计初衷是为了提高代码的可重用性和可维护性。它允许开发人员使用面向对象编程(OOP)范例,这使得…...
保姆级别!!!--全网绝对教你会!!教你如何使用MQTTFX连接阿里云平台中的设备----下期告诉你如何创建!
本期需要下载的软件 MQttfx安装包,本人打包的-嵌入式文档类资源-CSDN文库 目录 第一步:建造阿里云设备 这个可以先忽略建造步骤,下期将提供步骤。 第二步:下载mqttfx软件 第三步:填写密钥信息进行连接 查看三元…...
Unexpected token ‘‘‘, “‘{“type“:““... is not valid JSON
尝试低代码schema解析JSON时报错,奇怪的是控制台解析正常,项目js执行JSON.parse()报错,简直无语了,,, 只能挨个检查了,首先温习了下JSON 的标准格式: JSON的合法符号:{(左大括号) }(右大括号) "(双引号) :(冒号) ,(逗号) [(左中括号) ](右中括号) JSON字符串:…...
关于C语言的杂记5
文章目录 引入正文内部函数与外部函数相关数组的知识点数组的初始化测试一维数组在内存中存储的地址:遍历二维数组的值测试二维数组的地址(观察内存情况)数组下标为0开始的由来 两个数交换位置的三种方法 引入 写在前面:关于C语言这部分内容,…...
YOLOv5 vs YOLOv6 vs YOLOv7目标检测模型速度和准确度的性能比较——深入研究
如果您正在进行目标检测项目,您很可能会选择众多 YOLO 模型中的一种。从现有的 YOLO 对象检测模型的数量来看,如何选择最佳模型是一个艰难的选择。 您可能会发现自己正在考虑: 选择哪种 YOLO 模型以获得最佳 FPS? CPU 与 GPU 的推理速度如何?选择哪种 GPU?微型、小型、…...
如何增加网站权重?有效提高网站权重的技巧方法
权重对于网站优化来说非常的重要,那什么是网站权重呢?网站权重是指搜索引擎给网站(包括网页)赋予一定的权威值,对网站(含网页)权威的评估评价。一个网站权重越高,在搜索引擎所占的份…...
路径规划 | 图解快速随机扩展树RRT算法(附ROS C++/Python/Matlab仿真)
目录 0 专栏介绍1 什么是RRT算法?2 图解RRT算法原理3 算法仿真与实现3.1 ROS C++实现3.2 Python实现3.3 Matlab实现0 专栏介绍 🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);…...
【Stable Diffusion WebUI】一篇文章教你如何安装和使用Stable Diffusion WebUI
文章目录 Stable Diffusion WebUI1. 安装1.1 下载 stable-diffusion-webui1.2 运行 webui.sh 2. 安装插件2.1 命令行安装2.2 extensions 安装2.3 常用插件 3. 使用教程3.1 页面布局3.3 快捷栏设置3.3.1 PNG Info3.3.2 Tagger Stable Diffusion WebUI 1. 安装 1.1 下载 stable…...
Python篇——数据结构与算法(第二部分)
目录 二、排序算法(承接第一部分) 1、堆排序算法——树的基础知识补充 2、树的基本概念 3、二叉树基础知识 (1)满二叉树 (2)完全二叉树 (3)二叉树的存储方式(表示方式…...
人工智能之读懂CNN卷积神经网络
通过往期文章的分享,我们了解了神经网络的结构,一般分为输入层,隐藏层,输出层 TensorFlow神经网络 那什么是卷积神经网络那,这就要我们追溯一下人类识别图像的原理 人类的视觉原理如下:从原始信号摄入开始(瞳孔摄入像素 Pixels),接着做初步处理(大脑皮层某些细胞发现…...
go手写Redis(1)之协议说明
手写Redis 参考大佬的go实现redis,自己实现一个简单版本的用于学习go以及网络编程相关 https://github.com/HDT3213/godis https://coding.imooc.com/class/576.html #慕课网课程 源码地址: https://gitee.com/haijun1998/go_redis RESP协议 Redis Ser…...
Hadoop/HbBase/Hive/HDFS/MapReduce都是什么?
目录 一图胜万言!! 解释说明 1. hadoop 2. hive 3. hbase 总结 一图胜万言!! 解释说明 1. hadoop 它是一个分布式计算分布式文件系统,前者其实就是 MapReduce,后者是 HDFS 。后者可以独立运行&…...
羽毛球中级提高班课后总结
2023.3.28第一课 🏸️四点对角线步伐练习🏸️ 1️⃣每一次接球一定要有启动步,脚跟离地; 2️⃣两边上网都是先迈右腿,加一个并步,最后一步大迈步,脚跟先落地; 3️⃣右边上网脚尖朝…...
多维时序预测 | Matlab基于最小二乘支持向量机LSSVM多维时间序列预测,LSSVM多变量时间序列预测
文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 基于最小二乘支持向量机LSSVM多维时间序列预测LSSVM多变量时间序列预测,matlab代码 评价指标包括:MAPE、MAE、RMSE和R2等,代码质量极高,...
KDZK-F水轮发电机转子测试仪
一、产品概述 KDZK-F水轮发电机转子测试仪是判断发电机转子绕组有无匝间短路的专用仪器,可以自动、手动(单向或双向)测量转子绕组的电压、电流、阻抗、功率、相位角等参数。 二、功能与特点 旋转鼠标,操作更方便。 可选择快速的…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
如何应对敏捷转型中的团队阻力
应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中,明确沟通敏捷转型目的尤为关键,团队成员只有清晰理解转型背后的原因和利益,才能降低对变化的…...
数据结构:递归的种类(Types of Recursion)
目录 尾递归(Tail Recursion) 什么是 Loop(循环)? 复杂度分析 头递归(Head Recursion) 树形递归(Tree Recursion) 线性递归(Linear Recursion)…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架
1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...
