栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2021-10-09 leetcode 数据结构 DFS 841.钥匙和房间 C++

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-09 leetcode 数据结构 DFS 841.钥匙和房间 C++

题目 钥匙和房间

要素

从房间0获取其他房间钥匙,再从有钥匙的房间中获取其他房间钥匙
Q:最后所有房间是否都可访问?

思路

定义
key:某房间的钥匙,对应该房间
visited:房间访问能否 visited[key] == 0/1 分别表示第key个房间:不可访问 /可访问
rooms:所有房间中的所有钥匙
rooms[i] :第i个房间中的所有钥匙
rooms[i][j]:第i个房间中的第j把钥匙
具体
采用DFS
从房间0开始逐个遍历其中的钥匙
对于rooms[0][I],即从房间0中检查的第i把钥匙
若该钥匙对应的房间已访问,则跳过
若未访问,则标注可访问,并对该房间中的钥匙进行遍历

可访问的房间都访问完毕后
检查每个房间是否可访问,若是,则返回true,反之false

class Solution {
public:
    void dfs(int key, vector>& rooms, vector& visited){
        if(visited[key]) //对于房间key:已访问
            return ;
        //房间key未访问,标注访问
        visited[key] = 1;
        int m = rooms[key].size();//得到该房间的钥匙数目
        for(int i = 0; i < m; i++)//对每个钥匙进行遍历
            dfs(rooms[key][i], rooms, visited);//对每一把钥匙对应的房间进行访问
    }
    bool canVisitAllRooms(vector>& rooms) {
        int n = rooms.size();
        vector visited(n,0);//最开始,所有房间访问记录都为0
        dfs(0, rooms, visited);//从房间0开始
        for(int i = 0; i < n; i++){//若所有房间都可以访问,则为true
            if(visited[i] != 1)
                return false;
        }
        return true;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/311517.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号