leetcode 841. 钥匙和房间

图论2】【深度优先遍历

class Solution {
    public boolean canVisitAllRooms(List<List<Integer>> rooms) {
        //定义一个访问数组,用来保存房间是否被访问过
        boolean[] visited = new boolean[rooms.size()];
        dfs(rooms,0,visited);
        for(int i=0; i<visited.length; i++){
            if(!visited[i]) return false;
        }
        return true;
    }
    public void dfs(List<List<Integer>> rooms, int n, boolean[] visited){
        //如果当前房间已经访问过则返回
        if(visited[n]) return;
        //如果没有访问过,现在访问了则做一下访问标记
        visited[n] = true;
        //遍历本房间内的所有关联房间
        for(int i : rooms.get(n)){
            dfs(rooms,i,visited);
        }
        return;
    }
}

总结:本题与【leetcode 797. 所有可能的路径】不同之处在于,本题不需要回溯,因为不需要知道所走的路径。本题只需要知道是否所有的房间都被访问了,因此通过设置一个 “访问数组” 进行记录,如果搜索结束只要有值为false,则表明一定至少存在一个房间被访问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值