diff --git a/problems/0841.钥匙和房间.md b/problems/0841.钥匙和房间.md index d281dc5a..055a023c 100644 --- a/problems/0841.钥匙和房间.md +++ b/problems/0841.钥匙和房间.md @@ -220,6 +220,55 @@ func canVisitAllRooms(rooms [][]int) bool { ``` JavaScript: +```javascript +//DFS +var canVisitAllRooms = function(rooms) { + const dfs = (key, rooms, visited) => { + if(visited[key]) return; + visited[key] = 1; + for(let k of rooms[key]){ + // 深度优先搜索遍历 + dfs(k, rooms, visited); + } + } + const visited = new Array(rooms.length).fill(false); + dfs(0, rooms, visited); + //检查是否都访问到了 + for (let i of visited) { + if (!i) { + return false; + } + } + return true; +}; + +//BFS +var canVisitAllRooms = function(rooms) { + const bfs = rooms => { + const visited = new Array(rooms.length).fill(0); // 标记房间是否被访问过 + visited[0] = 1; // 0 号房间开始 + const queue = []; //js数组作为队列使用 + queue.push(0); // 0 号房间开始 + // 广度优先搜索的过程 + while(queue.length !== 0){ + let key = queue[0]; + queue.shift(); + for(let k of rooms[key]){ + if(!visited[k]){ + queue.push(k); + visited[k] = 1; + } + } + } + // 检查房间是不是都遍历过了 + for(let i of visited){ + if(i === 0) return false; + } + return true; + } + return bfs(rooms); +}; +``` ----------------------- * 作者微信:[程序员Carl](https://mp.weixin.qq.com/s/b66DFkOp8OOxdZC_xLZxfw)