LC:841 钥匙和房间

题目

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

当你进入一个房间,你可能会在里面找到一套不同的钥匙,每把钥匙上都有对应的房间号,即表示钥匙可以打开的房间。你可以拿上所有钥匙去解锁其他房间。

给你一个数组 rooms 其中 rooms[i] 是你进入 i 号房间可以获得的钥匙集合。如果能进入 所有 房间返回 true,否则返回 false

示例 1:

lua 复制代码
输入: rooms = [[1],[2],[3],[]]
输出: true
解释:
我们从 0 号房间开始,拿到钥匙 1。
之后我们去 1 号房间,拿到钥匙 2。
然后我们去 2 号房间,拿到钥匙 3。
最后我们去了 3 号房间。
由于我们能够进入每个房间,我们返回 true。

示例 2:

lua 复制代码
输入: rooms = [[1,3],[3,0,1],[2],[0]]
输出: false
解释: 我们不能进入 2 号房间。

解法

我的解法不算最优,但直接用了dfs而且我觉得挺易懂的,这道题主要是考察图的遍历和dfs和bfs,因为图的遍历就是需要遍历整个图,找出从起始节点开始是否能够访问到所有节点。

java 复制代码
class Solution {
    int N = 10010, M = N * 2 + 10, idx = 0, count = 1;
    boolean[] st = new boolean[N];
    List<List<Integer>> rooms;
    public boolean canVisitAllRooms(List<List<Integer>> room) {
        // Arrays.fill(h, -1);
        rooms = room;
        int n = rooms.size();
        dfs(0);
        if(count == n) {
            return true;
        }
        return false;
    }
    public void dfs(int nowx) {
        st[nowx] = true;
        List<Integer> nowList = rooms.get(nowx);
        System.out.println(nowx);
        for(Integer i : nowList) {
            if(st[i])    continue;
            dfs(i);
            count ++;
        }
    }
}
相关推荐
oioihoii几秒前
C++共享内存小白入门指南
java·c++·算法
Bruce_kaizy2 分钟前
c++图论————图的基本与遍历
c++·算法·图论
用户99045017780093 分钟前
ruoyi-vue2集成flowable6.7.2后端篇
后端
l1t6 分钟前
利用小米mimo为精确覆盖矩形问题C程序添加打乱函数求出更大的解
c语言·开发语言·javascript·人工智能·算法
qq_12498707538 分钟前
基于springboot框架的小型饮料销售管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·spring·毕业设计
亭上秋和景清8 分钟前
strlen;strcpy ;strcat
算法
_OP_CHEN8 分钟前
【算法基础篇】(三十五)图论基础之最小生成树:从原理到实战,彻底吃透 Prim 与 Kruskal 算法
算法·蓝桥杯·图论·最小生成树·kruskal算法·prim算法·acm/icpc
LYFlied14 分钟前
【算法解题模板】-【回溯】----“试错式”问题解决利器
前端·数据结构·算法·leetcode·面试·职场和发展
我命由我1234514 分钟前
Python Flask 开发:在 Flask 中返回字符串时,浏览器将其作为 HTML 解析
服务器·开发语言·后端·python·flask·html·学习方法
拾忆,想起17 分钟前
设计模式:软件开发的可复用武功秘籍
开发语言·python·算法·微服务·设计模式·性能优化·服务发现