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;
    }
}
相关推荐
zhanghaha13141 小时前
HTML系列教程:14_HTML 表单与输入框 <form>、<input> 零基础详解
java·前端·javascript
Dola_Zou6 小时前
工厂智能排产软件算法保护与按产线计费实战
算法·自动化·软件工程·软件加密
yxlalm6 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风7 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
Seoyoneh8 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人8 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
啦啦啦啦啦zzzz8 小时前
Logger的组装(c++20)
c++·算法·c++20
tryxr8 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei8 小时前
Java 写 Agent:模型只是组件
java·开发语言
尾善爱看海9 小时前
前端算法与手写题集
前端·算法