841. 钥匙和房间

news2024/11/28 0:40:24

841. 钥匙和房间

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • _841钥匙和房间_dfs
    • _841钥匙和房间_bfs
  • 错误经验吸取

原题链接:

841. 钥匙和房间

https://leetcode.cn/problems/keys-and-rooms/description/

完成情况:

在这里插入图片描述

解题思路:

这段代码是一个解决问题的类,其中包含了一个私有方法dfs和一个公共方法canVisitAllRooms。dfs方法使用深度优先搜索(DFS)算法来遍历房间,同时记录哪些房间被访问过。canVisitAllRooms方法则调用dfs方法来检查是否可以访问所有房间。

具体解释如下:

  • dfs方法接收一个键值key、房间列表rooms和访问状态列表visited作为参数。如果当前房间已经被访问过,则直接返回;否则标记当前房间为已访问,并递归地对当前房间可以到达的房间进行深度优先搜索。
  • canVisitAllRooms方法接收一个房间列表rooms作为参数。首先创建一个与房间数量相同的访问状态列表visited,并调用dfs方法从第一个房间开始遍历。最后检查visited列表中是否所有房间都被访问过,若有未被访问的房间则返回false,否则返回true。

这段代码的主要功能是使用DFS算法来检查是否可以访问所有的房间,通过标记访问状态来避免重复访问,并最终返回一个布尔值表示是否可以访问所有房间。

参考代码:

_841钥匙和房间_dfs

package 代码随想录.图论;

import java.util.ArrayList;
import java.util.List;

public class _841钥匙和房间_dfs {
    /**
     * 房间编号从0开始计算 ,每个List<Integer>存储一个集合,集合里表示能去的所有方便
     * @param rooms
     * @return
     */
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        //dfs,看看能不能遍历到所有的节点即可。
        //先构造一个visited数组用来最后判别是否能访问到所有的节点
        List<Boolean> visited = new ArrayList<Boolean>(){{
            //并为里面rooms.size()尺寸赋值全false
            for (int i = 0; i < rooms.size();i++) {
                add(false);
            }
        }};
        dfs_canVisitAllRooms(0,rooms,visited);
        //检查是否都访问到了
        for (boolean flag : visited){
            if (!flag){
                return false;
            }
        }
        return true;
    }

    private void dfs_canVisitAllRooms(int idx_key, List<List<Integer>> rooms, List<Boolean> visited) {
        if (visited.get(idx_key)){
            return;
        }
        visited.set(idx_key,true);
        for (int k : rooms.get(idx_key)){
            //递归
            dfs_canVisitAllRooms(k,rooms,visited);
        }
    }
}

_841钥匙和房间_bfs

package 代码随想录.图论;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.List;

public class _841钥匙和房间_bfs {
    /**
     * 房间编号从0开始计算 ,每个List<Integer>存储一个集合,集合里表示能去的所有方便
     * @param rooms
     * @return
     */
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        //先构造一个visited数组用来最后判别是否能访问到所有的节点
        boolean visited [] = new boolean[rooms.size()];
        visited[0] = true;
        Deque<Integer> queueList = new ArrayDeque<Integer>();
        queueList.add(0);   //加入一号房间
        while (!queueList.isEmpty()){
            //遍历,并不断加入新的节点
            int curNode_Key = queueList.poll();
            //再去对应位置获取所有的元素加入queueList,然后进行判断,然后迭代
            for (int key : rooms.get(curNode_Key)){
                if (visited[key])   continue;
                visited[key] = true;
                queueList.add(key);
            }
        }
        for (boolean key_visit : visited){
            if (!key_visit) return false;
        }
        return true;
    }
}

错误经验吸取

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

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

相关文章

Vue.js组件精讲 基础:Vue.js组件的三个API:prop、event、slot

如果您已经对 Vue.js 组件的基础用法了如指掌&#xff0c;可以跳过本小节&#xff0c;不过当做复习稍读一下也无妨。 组件的构成 一个再复杂的组件&#xff0c;都是由三部分组成的&#xff1a;prop、event、slot&#xff0c;它们构成了 Vue.js 组件的 API。如果你开发的是一个…

clickhouse深入浅出

基础知识原理 极致压缩率 极速查询性能 列式数据库管理 &#xff0c;读请求多 大批次更新或无更新 读很多但用很少 大量的列 列的值小数值/短字符串 一致性要求低 DBMS&#xff1a;动态创建/修改/删除库 表 视图&#xff0c;动态查/增/修/删&#xff0c;用户粒度设库…

llama2.c与chinese-baby-llama2语言模型本地部署推理

文章目录 简介Github文档克隆源码英文模型编译运行中文模型&#xff08;280M&#xff09;main函数 简介 llama2.c是一个极简的Llama 2 LLM全栈工具&#xff0c;使用一个简单的 700 行 C 文件 ( run.c ) 对其进行推理。llama2.c涉及LLM微调、模型构建、推理端末部署&#xff08…

15.2024

全排列---邻里交换法 代码&#xff1a; public class 第十五题 {static int count;static int a[]{1,2,3,4,5,6,7,8,9};public static void main(String[] args) {f(a,0);System.out.println(count/6);}public static void f(int a[],int step){if(stepa.length-1){if (a[0]a…

大语言模型开源数据集

本文目标&#xff1a;汇聚目前大语言模型预训练、微调、RM/RL、评测等全流程所需的常见数据集&#xff0c;方便大家使用&#xff0c;本文持续更新。文章篇幅较长&#xff0c;建议收藏后使用。 一、按语料类型分类 1、维基百科类 No.1 Identifying Machine-Paraphrased Plagia…

Matlab:任意的三维Cubic空间中生成大小不一样的小球,并画出截面

生成小球和大球的代码块 clear all clc close all % entorid3D rand(10,3, 0.1,0.9);% for c11 0.05:0.3:0.95 % for c12 0.05:0.3:0.95 % for c13 0.05:0.3:0.95 % [x1,y1,z1] ellipsoid(c11, c12, c13, 0.05, 0.05, 0.05,100); % …

Vue+el-table 修改表格 单元格横线边框颜色及表格空数据时边框颜色

需求 目前 找到对应的css样式进行修改 修改后 css样式 >>>.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F !important;}第二个问题 修改 表格空数据时&#xff0c;边框颜色 css样式 >>>.el-table::before {background-color: tra…

C/C++的前置++、后置++以及前置--、后置--使用的详细讲解

在c/c语言中&#xff0c;变量的自增和自减经常被使用到&#xff0c;所以今天就来个详细讲解。本次讲解用到的语言是c语言&#xff0c;在c中的原理也是一样的。 变量自增自减分为四种情况&#xff0c;每种情况的结果都有所差异&#xff0c;四种情况分别为前置、后置、前置--、后…

代码整洁之道【2】--函数

关于函数部分的总结 一、函数只做一件事 函数应该只做一件事、做好这件事、只做这件事。 判断函数是否不止做了一件事&#xff0c;还有一个方法&#xff0c;就是看是否能再拆出一个函数&#xff0c;该函数不仅只是单纯地重新 二、函数尽量不要太长 按照作者的理论&#xff…

MQ之————如何保证消息的可靠性

MQ之保证消息的可靠性 1.消费端消息可靠性保证&#xff1a; 1.1 消息确认&#xff08;Acknowledgements&#xff09;&#xff1a; 消费者在接收到消息后&#xff0c;默认情况下RabbitMQ会自动确认消息&#xff08;autoAcktrue&#xff09;。为保证消息可靠性&#xff0c;可以…

VMware启动显示“打开虚拟机时出错: 获取该虚拟机的所有权失败”

提示框&#xff08;忘截图了&#xff09;里提示目录C:\Users\mosep\Documents\Virtual Machines\VM-Win10 x64\中的某个文件&#xff08;在我这里好像是VM-Win10 x64.vmx&#xff0c;VM-Win10 x64是我给虚拟机取的名字&#xff09;在被使用中。 找到这个目录&#xff0c;删除.…

【Linux】虚拟化技术docker搭建SuitoCRM系统及汉化

CRM系统 CRM&#xff08;Customer Relationship Management&#xff0c;客户关系管理&#xff09;系统是一种用于管理和优化企业与客户关系的软件工具。在商业竞争激烈的现代社会中&#xff0c;CRM系统已成为许多企业提高销售、增强客户满意度和实现持续增长的重要工具。 搭建…

NumPy进阶(二)

2. NumPy进阶(二) 2.1 Numpy数组操作 2.1.1 添加元素 numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组&#xff0c;并把原来的数组复制到新数组中 注意&#xff1a; 插入的维度要保证所有数组的长度是相同的如果没有指定轴&#xff0c;数组会被扁平处理 ndarr…

MOMENT: A Family of Open Time-series Foundation Models

MOMENT: A Family of Open Time-series Foundation Models PDF: https://arxiv.org/pdf/2402.03885.pdf Code: https://anonymous.4open.science/r/BETT-773F/README.md 1 概述 MOMENT是一个用于通用时间序列分析的开源基础模型系列。由于缺少大型公共时间序列存储库、时间序…

matlab:有限差分求解纳维尔(Navier)边界的双调和(Biharmonic)方程,边值为零

我们考虑如下形式的双调和方程的数值解 其中&#xff0c;Ω是欧氏空间中的多边形或多面体域&#xff0c;在其中&#xff0c;d为维度&#xff0c;具有分段利普希茨边界&#xff0c;满足内部锥条件&#xff0c;f(x) ∈ L2(Ω)是给定的函数&#xff0c;∆是标准的拉普拉斯算子。算…

JVM规范中的运行时数据区

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;每天一个知识点 ✨特色专栏&#xff1a…

YOLOv9改进策略 :卷积魔改 | 变形条状卷积,魔改DCNv3二次创新

💡💡💡本文独家改进: 变形条状卷积,DCNv3改进版本,不降低精度的前提下相比较DCNv3大幅度运算速度 💡💡💡强烈推荐:先到先得,paper级创新,直接使用; 💡💡💡创新点:1)去掉DCNv3中的Mask;2)空间域上的双线性插值转改为轴上的线性插值; 💡💡💡…

QT windeployqt打包出现无法正常启动问题

QT 通过windeployqt 打包后出现的问题 原因QT构建选择的是64位的 但是windows下运行的却是32位的 步骤打开32的所在路径 一般在上一级目录会有安装好的64位的MSVC工具 运行打包即可

装饰建材商城网满足家装行业需求,改变传统装修市场

装饰建材商城网满足家装行业需求&#xff0c;改变传统装修市场 随着国内楼市的火爆发展&#xff0c;家装行业可谓是炙手可热。人们关于家装的需求也开始从过去简单的宜居&#xff0c;开始向多元化需求转变&#xff0c;如环保、健康、安全、绿色、时尚等等。加上互联网的快速发展…

电能质量测试仪的功能特点

武汉凯迪正大电能质量测试仪功能特点 1、多通道测量&#xff1a;4个电压通道、4个电流通道同时测量。 2、电气参数测量&#xff1a;可同时测量电压幅值、电流幅值、相位、频率、有功功率、无功功率、功率因数等参数&#xff1b; 3、可测量2-64次的电压谐波和电流谐波含量&am…