Leetcode из поиска в ширине (BFS) Тематический -133. Рисунок клон (клон график)
BFS Подробная запись: Leetcode из поиска в ширину (BFS) Тематическое -429 обхода последовательности N-дерево (N-арной дерева Уровень заказа Traversal ).
Учитывая неориентированный связи ссылочный узла, вернуть фигуру глубокой копию (клон). Каждый узел в графе содержит его значение val
( Int
), а также список своих соседей ( list[Node]
).
Пример:
Входные данные : { "$ ИД": "1" , "соседей": [{ "$ ID": "2", "соседей": [{ "$ REF":}, { "$ ИД"" 1 ":" 3 "" соседей ": [ {" $ реф ":" 2 "}, {" $ ID ":" 4 "" соседей ": [{" $ реф ":" 3 "}, {" $ реф " : "1"}], " вал": 4}], "вал": 3}], "вал": 2}, { "$ исх": "4"}], "вал": 1} объяснение: узел 1 является значением 1, она имеет два соседей: узлы 2 и 4. Значение узла-равно 2, он имеет два соседей: узлы 1 и 3. 3 является значением узла 3, он имеет два соседей: узлы 2 и 4. 4 является значением узла 4, он имеет два соседей: узлы 1 и 3.
Советы:
- Узлы в диапазоне от 1 до 100.
- Неориентированный граф является простым графом , что означает , что нет дубликатов на стороны фиг, поскольку нет петли.
- По мере того как граф неориентированный, если узел р является узел д соседом, узел д также должен быть узел р соседями.
- Скопировано узла должна быть предоставлена в качестве ссылки на возвращает клонов фиг.
Учитывая график, этот график копия, возвращает копию.
Идеи заключаются в следующем:
1, новая карта, ключ для сохранения старого узла, значение для нового узла хранения
2, узел начали присоединяться очередь, стали BFS
3, BFS
- Удалите температуру узла, траверс всех своих соседей н
- Проверьте карту, чтобы увидеть, если сосед был скопирован п
- Если п не является соседом копия, копия закончена, добавленный очереди узел B
- Список температура соседний список из того, добавление указанного выше шага, чтобы скопировать успех соседей в списке
- Возврат к третьей стадии, очередь пуста подпрыгивать
/ * // Определение для узла. класс Node { общественный ИНТ вал; Публичный список <Узел> соседи; общественный узел () {} общественного узел (интермедиат _val, List <Node> _neighbors) { вал = _val; соседи = _neighbors; } }; * / Класс Решение { общественный узел cloneGraph (Node узел) { если (узел == NULL ) обратный узел; Очередь <Узел> очереди = новый LinkedList <> (); Карта <Узел Узел> карта = новый HashMap <> (); Узел анс = новый узел (node.val, новый ArrayList <> ()); map.put (узел, ANS); queue.offer (узел); в то время как (! {queue.isEmpty ()) Node температура = queue.poll (); для (Node нб: temp.neighbors) { если (! map.containsKey (пь)) { map.put (нб, новый узел (nb.val, новый ArrayList <> ())); queue.offer (NB); } Map.get (темп) .neighbors.add (map.get (NB)); } } возвращение ANS; } }