2026年--Lc342-841. 钥匙和房间(图 - 广度优先搜索)--java版

1.题目

2.思路

最初,除 0 号房间外的其余所有房间都被锁住。你的目标是进入所有的房间。然而,你不能在没有获得钥匙的时候进入锁住的房间。

当 x 号房间中有 y 号房间的钥匙时,我们就可以从 x 号房间去往 y 号房间。如果我们将这 n 个房间看成有向图中的 n 个节点,那么上述关系就可以看作是图中的 x 号点到 y 号点的一条有向边。这样一来,问题就变成了给定一张有向图,询问从 0 号节点出发是否能够到达所有的节点。

时间复杂度:O(N + K),N:房间数,K:钥匙总数。时间复杂度 = 程序执行的"基本操作"次数,随输入规模增长的上界,不是只看 for,而是

所有会随 N 或 K 增长的操作,都要算进去。

空间复杂度:O(N),vis 数组 + 队列

3.代码实现

java 复制代码
class Solution {
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        int n= rooms.size();
        int cnt=0;
        boolean[] vis = new boolean[n];
        Queue<Integer> qu=new LinkedList<Integer>();
        vis[0]=true;//被访问过的节点置为1
        qu.offer(0);
        while(!qu.isEmpty())
        {//队列的首元素删除,并返回值
            int x=qu.poll();//x当前访问的房间
            cnt++;//访问房间数 +1
            for(int mm:rooms.get(x))
            {
                if(vis[mm]==false)//进入新房间(如果没访问过)
                {
                    vis[mm]=true;//标记为访问过
                    qu.offer(mm);//加入队列,之后再继续探索
                }
            }

        }
        if(cnt==n)//如果访问过的房间数 = 房间总数, 所有房间都能访问到
        {
            return true;
        }
        return false;
    }
}
相关推荐
摇滚侠2 分钟前
Java 项目教程《黑马商城》认识微服务 01 - 04
java·微服务·架构
智慧物业老杨3 分钟前
老旧小区团购模式下的数智化工单体系搭建与实践——基于保利项目600+工单的技术落地解析
java·人工智能·后端·科技·struts
ch.ju7 分钟前
Java Programming Chapter 2-Nested call
java·开发语言
05候补工程师16 分钟前
【408考研·OS】核心考点:中断分类、线程模型 (KLT/ULT) 与调度算法方法论总结
经验分享·笔记·考研·算法
杨充25 分钟前
03.计算机基础CPU设计
java·开发语言
无所事事O_o25 分钟前
【监控报警体系建设】监控标准与最佳实践
java·架构·监控
多加点辣也没关系26 分钟前
数据结构与算法|第十二章:图
数据结构·算法
摇滚侠31 分钟前
Java 项目教程《黑马商城》OpenFeign 15 - 19
java·开发语言
小小小米粒31 分钟前
线程池创建模版
java
MClink32 分钟前
小米开源大模型 MiMo 登顶全球第一,还白送百万亿 Token?手把手教你薅羊毛
人工智能·python·算法·openai·架构设计