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;
    }
}
相关推荐
谢亮_vipxieliang3 分钟前
泛型擦除、通配符与 PECS 一次讲透
java·面试
八解毒剂11 分钟前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
乐迪信息1 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
打工仔折腾 AI1 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
ZealSinger1 小时前
Java虚拟线程上线后瓶颈转移到哪看三层
java·开发语言·firefox
2601_961133281 小时前
盘立方软件指标文华期货公式下载
java
蜗牛互联网1 小时前
长任务多Agent共享文件系统的Manifest交接模式
java·人工智能·后端
Sirens.2 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕2 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
sunshine22 girl3 小时前
Java学习五 面向对象高级5 内部类1
java·学习