dfs遍历所有结点(无权有向图)

本文介绍了一个LeetCode题目841,涉及使用深度优先搜索(DFS)解决关于房间和钥匙的问题。给定一个二维数组rooms,表示每个房间需要的钥匙位置,目标是确定是否可以从初始无锁房间访问所有房间。解决方案包括一个Solution类,其中包含用于遍历和访问房间的dfs函数。
摘要由CSDN通过智能技术生成

841. 钥匙和房间 - 力扣(LeetCode)

class Solution {
public:
//用一个vector暂时存储当前的一个结点,这个是用来判断是否访问过该节点的容器
    vector<int> visited;
    //假设一个计数器来计算当前访问的结点的数量,每次访问结点的时候计数器加一,当 n == count不成立的时候,那么这个式子就是False,否则就是TRUE,即是可以访问所有的结点
    int count = 0;
    void dfs(vector<vector<int>>&rooms, int x){
        visited[x] = true;
        count++;
        for(auto &it:rooms[x]){
            if(!visited[it])
                dfs(rooms,it);
        }
    }
    bool canVisitAllRooms(vector<vector<int>>& rooms) {
        int n=rooms.size();
        visited.resize(n);
        dfs(rooms,0);
        return n == count;
    }
};
/*
rooms[i]表示在第几个房间拿到的钥匙几,空数组表示的是该房间是没有锁住的
假设房间0为无锁的,从当前结点出发遍历所有的房间,假设访问过的状态是TRUE,只要有一个结点的状态不是访问过的,就从当前结点进行深度遍历
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值