深度优先搜索系列三-LeetCode 841钥匙和房间

2020-01-20  本文已影响0人  徐慵仙

题目

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

钥匙和房间

简析

这个题比较简单,从0开始,逐个向下搜索就可以了,借助一个数组b[1001]标记能打开的房间,搜索的时候打开了i号房间,b[i]设置为1;搜索结束后,判断数组b中是否还有为0的,如果还有,就返回flase。

第一步 for循环范围

当然是第k个房间里的每一个数啦:

for(int i=0;i<rooms[k].size();i++)

第二步 判断能不能用

for(int i=0;i<rooms[k].size();i++){
            if(b[rooms[k][i]]==0){
                
            }
}

第三步 if成立后的处理

for(int i=0;i<rooms[k].size();i++){
            if(b[rooms[k][i]]==0){
                b[rooms[k][i]]=1;
                search(rooms,rooms[k][i]);
            }
}

完整代码

class Solution {
public:
    int b[1001]={0};
    bool canVisitAllRooms(vector<vector<int>>& rooms) {
        b[0]=1;
        search(rooms,0);
        for(int i=0;i<rooms.size();i++)
                if(b[i]==0) return false;
        return true;
    }
    void search(vector<vector<int>>& rooms,int k){
        for(int i=0;i<rooms[k].size();i++){
            if(b[rooms[k][i]]==0){
                b[rooms[k][i]]=1;
                search(rooms,rooms[k][i]);
            }
        }
    }
};
上一篇 下一篇

猜你喜欢

热点阅读