Answer
t.me/js_testОтвет:
const visitAllRooms = (rooms) => {
const DFS = (rooms, currentRoom, visited) => {
let visitedCount = 1;
visited[currentRoom] = true;
for (const item of rooms[currentRoom])
if (!visited[item]) visitedCount += DFS(rooms, item, visited);
return visitedCount;
};
const visitedCount = DFS(rooms, 0, []);
return visitedCount == rooms.length;
};
Обьяснение:
Для решения этой задачи воспользуемся методом поиска в глубину. То есть из каждой посещенной комнаты запустим поиск по ключам, которые мы получили. Не забываем считать посещенные комнаты. Зная общее кол-во комнат, в конце мы просто проверим все ли мы смогли посетить.
Детали реализации смотрите в коде.
Код для проверки:
const visitAllRooms = (rooms) => {
const DFS = (rooms, currentRoom, visited) => {
let visitedCount = 1;
visited[currentRoom] = true;
for (const item of rooms[currentRoom])
if (!visited[item]) visitedCount += DFS(rooms, item, visited);
return visitedCount;
};
const visitedCount = DFS(rooms, 0, []);
return visitedCount == rooms.length;
};
console.log(visitAllRooms([[1], [2], [3], []]));
console.log(visitAllRooms([[1, 3], [3, 0, 1], [2], [0]]));