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) {
        //创建邻接表 graph
        List<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;
    }
}

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

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

相关文章

redis【stream】:对redis流数据类型的详细介绍

目录 stream产生原因 stream的概念 stream底层实现 stream的常用指令 常用命令一览&#xff1a; xadd命令 xread命令 xlen命令 xrange命令 xrevrange命令 xtrim命令 xdel命令 xgroup命令 xinfo命令 xpending命令 xreadgroup命令 xack命令 xclaim命令 stream产…

linux周六串讲

esc. //粘贴复制上一条命令的参数 cat /etc/resolv.conf //查看DNS地址 route -n //查看网关 hostname //临时修改主机名 hostnamectl set-hostname 名称 //永久修改主机名 ssh root192.168.10.233 //用windows远程的格式&#xff0c;在CMD窗口输入这个命令 …

zabbix部署

zabbix 是什么&#xff1f; zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 zabbi…

ZooKeeper快速入门学习+在springboot中的应用+监听机制的业务使用

目录 前言 基础知识 一、什么是ZooKeeper 二、为什么使用ZooKeeper 三、数据结构 四、监听通知机制 五、选举机制 使用 1 下载zookeeper 2 修改 3 排错 在SpringBoot中的使用 安装可视化插件 依赖 配置 安装httpclient方便测试 增删查改 新建控制器 创建节点…

云计算:优势与未来趋势

文章目录 前言一、云计算的优势1. 降低IT成本2. 提高工作效率3. 提高业务的可靠性和稳定性4. 提升安全性 二、未来发展趋势1. AI与云计算的融合2. 边缘计算的发展3. 多云的趋势4. 服务器和存储的创新 三、 行业应用案例1.金融行业2.医疗保健行业3.教育行业4.零售和物流行业 四、…

【章节1】git commit规范 + husky + lint-staged实现commit的时候格式化代码

创建项目我们不多说&#xff0c;可以选择默认的&#xff0c;也可以用你们现有的项目。 前言&#xff1a; git commit 的时候总有人填写一堆花里胡哨乱写的内容&#xff0c;甚至看了commit 的描述都不知道他这次提交到底做了个啥&#xff0c;那我们有没有办法规范大家的commit提…

边沿检测电路

目录 同步信号的边沿检测 异步信号的边沿检测 所谓的边沿检测&#xff08;幼教边沿提取&#xff09;&#xff0c;就是检测输入信号的上升沿和下降沿。在设计数字系统时&#xff0c;边沿检测是一种很重要的思想&#xff0c;实际编程时用的最多的时序电路应该就是边沿检测电路和…

docker网络管理

1、常用的网络模式 Docker 容器的网络默认与宿主机、与其他容器都是相互隔离。 1.1、host 使用主机的网络命名空间&#xff0c;这意味着容器与主机共享同一个IP地址和端口号。使用host网络可以提高容器的网络性能&#xff0c;但是会降低容器的隔离性(容器直接使用宿主机网络栈…

浅谈电解电容在电路设计中的作用

谈起电解电容我们不得下多了解一下它的作用 1、滤波作用 在电源电路中&#xff0c;整流电路将交流变成脉动的直流&#xff0c;而在整流电路之后接入一个较大容量的电解电容&#xff0c;利用其充放电特性(储能作用)&#xff0c;使整流后的脉动直流电压变成相对比较稳定的直流电…

C++是如何从代码到游戏的

有一个Student类。C怎么创建一个学生类的对象&#xff1f; // 嗯我会&#xff01;有两种方式&#xff1a; Student s; Student *s2 new Student("张三");现在这学生的行为有&#xff1a;吃饭&#xff0c;睡觉&#xff0c;上网课。现在你执行个上网课的行为&#xf…

次氯酸消毒剂制备中的全氟醚橡胶密封耐腐蚀电动阀门解决方案

摘要&#xff1a;次氯酸作为是一种新型消毒剂&#xff0c;近年来广泛应用于医疗卫生机构、公共卫生场所和家庭的一般物体表面、医疗器械、医疗废物等。由于次氯酸的酸性和强氧化性&#xff0c;使得次氯酸生产制备过程中会给流量调节阀门带来腐蚀并影响寿命和控制精度&#xff0…

UE5电脑配置要求是什么?2023虚幻5电脑配置推荐

虚幻引擎对于游戏创作者来说已经不再陌生。该软件为程序员构建和设计终极视频游戏&#xff0c;以创建壮观的游戏场景和流畅的动作。此外&#xff0c;它还处理音效、物理碰撞效果和控制。尤其是人工智能对角色的控制。与其他软件一样&#xff0c;Unreal Engine也有最低系统要求才…

数据类型的陷进,从表象看本质!

哪些值转为布尔值为false 1、undefined&#xff08;未定义&#xff0c;找不到值时出现&#xff09; 2、null&#xff08;代表空值&#xff09; 3、false&#xff08;布尔值的false&#xff0c;字符串"false"布尔值为true&#xff09; 4、0&#xff08;数字0&…

notepad++查询指定内容并复制

背景说明 记录一下使用notepad进行文本内容查找以及替换的相关场景,简单记录方便后期查看,场景内容: 1.从指定的给出内容中筛选出所有的人员id集合 2.将每一行后面添加逗号 1.从指定的给出内容中筛选出所有的人员id集合 要求从指定的给出内容中筛选出所有的人员id集…

如何增加网站权重?有效提高网站权重的技巧方法

权重对于网站优化来说非常的重要&#xff0c;那什么是网站权重呢&#xff1f;网站权重是指搜索引擎给网站&#xff08;包括网页&#xff09;赋予一定的权威值&#xff0c;对网站&#xff08;含网页&#xff09;权威的评估评价。一个网站权重越高&#xff0c;在搜索引擎所占的份…

Spring 初始导读

1.Spring初始 1. 为什么要学框架 学习框架相当于从"小作坊"到"工厂"的升级 , 小作坊什么都要做 , 工厂是组件式装配 , 特点就是高效. 2.框架的优点展示(SpringBoot Vs Servlet) 使用SpringBoot 项目演示框架相比 Servlet 所具备的以下优点: 无需配置 …

【原创】生成文件MD5图像,类似于GitHub的像素风格头像

前言 我想通过文件的md5生成关于这个md5的图像&#xff0c;类似于GitHub的随机像素头像&#xff0c;用处是让这个md5更加直观&#xff0c;也能用于生成各种用户头像&#xff0c;跟GitHub一样。 网上搜了一下&#xff0c;没有现成的方法&#xff0c;只能有一篇类似的文章可以借…

Android 图片编码之必备技能

在进行 Android 开发时&#xff0c;不可避免地会接触到许多图片格式&#xff0c;例如 JPEG、PNG 等。就以 JPEG 格式为例&#xff0c;它是一种有损压缩模式&#xff0c;使用 YCbCr 的颜色空间来保存色彩信息。当需要在屏幕上显示图片时&#xff0c;会将 JPEG 数据解码成 RGB 进…

如何对项目进度进行跟踪?逐步完善项目计划

我接手了一个小项目&#xff0c;但是无论是我还是领导&#xff0c;都认为这是个简单的项目&#xff0c;最多一月时间就能搞定。但是&#xff0c;随着时间推移&#xff0c;三个月也没有将内容完善。于是我进行了反思总结&#xff0c;我认为存在如下问题&#xff1a; 1、资源协…

spring源码篇(八)事务的原理

文章目录 前言基本操作验证 Spring事务的传播机制特殊的机制说明NOT_SUPPORTEDNESTEDSUPPORTS 源码加载事务自动配置类要不要加注解&#xff1a;EnableTransactionManagement配置类说明 EnableTransactionManagement 做了什么AutoProxyRegistrar做了什么创建的代理类是jdk动态代…