[2018-09-23] [LeetCode-Week3] 841. Keys and Rooms 图论

https://leetcode.com/problems/keys-and-rooms/description/


There are N rooms and you start in room 0. Each room has a distinct number in 0, 1, 2, ..., N-1, and each room may have some keys to access the next room.

Formally, each room i has a list of keys rooms[i], and each key rooms[i][j] is an integer in [0, 1, ..., N-1] where N = rooms.length. A key rooms[i][j] = v opens the room with number v.

Initially, all the rooms start locked (except for room 0).

You can walk back and forth between rooms freely.

Return true if and only if you can enter every room.

Example 1:

Input: [[1],[2],[3],[]]
Output: true
Explanation:
We start in room 0, and pick up key 1.
We then go to room 1, and pick up key 2.
We then go to room 2, and pick up key 3.
We then go to room 3. Since we were able to go to every room, we return true.
Example 2:

Input: [[1,3],[3,0,1],[2],[0]]
Output: false
Explanation: We can't enter the room with number 2.
Note:

1 <= rooms.length <= 1000
0 <= rooms[i].length <= 1000
The number of keys in all rooms combined is at most 3000.


显然是个有向图,dfs判断连通性即可


class Solution {
public:
    int n;
    int visit[1001];
    int edge[1001][1001];
    
    bool canVisitAllRooms(vector<vector<int>>& rooms) {
        n = rooms.size();
        memset(edge, 0, sizeof(0));
        
        for (int i = 0; i < rooms.size(); i++) {
            for (int j = 0; j < rooms[i].size(); j++) {
                int u = i;
                int v = rooms[i][j];
                edge[u][v] = 1;
            }
        }
        
        memset(visit, 0, sizeof(visit));
        
        dfs(0);
        for (int i = 0; i < n; i++) {
            if (!visit[i]) {
                return false;
            }
        }
        return true;
    }
    
    void dfs(int root) {
        visit[root] = 1;
        for (int i = 0; i < n; i ++) {
            if (edge[root][i]) {
                if (!visit[i]) {
                    dfs(i);
                }
            }
        }
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,871评论 0 10
  • 阳光是白光,天是纯蓝的,风也不知道疯到哪里去了,没有踪影;知了扯着嗓子叫"热……";宠物狗,跟在主人后面,伸...
    良田666阅读 199评论 1 1
  • 一个半月的修养,不上班的日子…从内心深处来说…很爽,非常爽。每天无所事事,就被老妈关心今天想吃什么,有没有长点肉回...
    木小果jovianne阅读 173评论 0 0
  • 文/用时间酿酒 因为简书,我们相聚在一起,因为写作,我们彼此之间多了一道沟通的桥梁,写作的路上没你想的那么孤单,在...
    全国简书会阅读 3,141评论 45 41
  • "凡我不能创造的,我就不能理解。" 学习的本质是为了进步,不自欺地直面自己对知识的掌握的程度是判断方法,对于一切学...
    谢宇雨阅读 680评论 0 2

友情链接更多精彩内容