LC841. 钥匙和房间

多注意解题思路,不是会了一种方法就可以。针对问题要想到用这种方法解决
解题思路:图的遍历,如果有节点遍历不到,那么说明没有连接进不去。所以遍历完经过的节点数如果不等于总的节点数那么就出错

深度优先遍历

def canVisitAllRooms(self, rooms):
        """
        :type rooms: List[List[int]]
        :rtype: bool
        """
        visited = set()
        visited.add(0)
        def dfs(i):
            if len(visited) == len(rooms):
                return True
            for j in rooms[i]:
                if j not in visited:
                    visited.add(j)
                    if dfs(j):
                        return True
            return False
        return dfs(0)

广度优先遍历

def canVisitAllRooms(self, rooms):
        """
        :type rooms: List[List[int]]
        :rtype: bool
        """
        visited = set()
        queue = deque([0])
        visited.add(0)
        while queue:
            i = queue.popleft()
            for j in rooms[i]:
                if j not in visited:
                    visited.add(j)
                    queue.append(j)
        return len(visited) == len(rooms)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值