leetcode841钥匙和房间

  • 使用深度优先遍历构造的图,只要访问过就标记已访问
int num=0;
vector<bool>vis;
void dfs(vector<vector<int>>& rooms,int x){
    vis[x]=true;
    num++;
    for(auto& v:rooms[x]){
        if(!vis[v])dfs(rooms,v);//说明这个房间没有进去过,所以可以访问
    }
}
int main(){
    vis.resize(rooms.size(),false);//初始化vis
    dfs(rooms,0);//0节点开始遍历
    if(num==rooms.size())return true;
    return false;
}
  • 使用广度优先搜索构造的图
  • vector<bool>vis;
    int num=0;
    bool bfs(vector<vector<int>>& rooms){
        queue<int>q;
        q.push(0);//从0开始
        vis[0]=true;
        while(!q.empty()){
            int x=q.front();q.pop();
            for(auto& v:rooms[x]){
                if(!vis[v]){//没有访问过入队
                    q.push(v);
                    vis[v]=true;//之后再遇见不能再去看了,入队了都会用for去查看房间
                }
            }
        }
    }

     

posted @ 2023-09-12 13:49  iu本u  阅读(9)  评论(0)    收藏  举报