Leetcode из поиска в ширине (BFS) Тематический -133. Рисунок клон (клон график)

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. Узлы в диапазоне от 1 до 100.
  2. Неориентированный граф является простым графом , что означает , что нет дубликатов на стороны фиг, поскольку нет петли.
  3. По мере того как граф неориентированный, если узел  р  является узел  д  соседом, узел  д  также должен быть узел  р  соседями.
  4. Скопировано узла должна быть предоставлена ​​в качестве ссылки на возвращает клонов фиг.

 

Учитывая график, этот график копия, возвращает копию.

Идеи заключаются в следующем:

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;
    } 
}

 

рекомендация

отwww.cnblogs.com/qinyuguan/p/11441492.html
рекомендация