试题
Учитывая ссылку узла в связном неориентированном графе, вернуть глубокую копию (клон) графа. Каждый узел в графе содержит Вэл (INT) и список (List [Node]) своих соседей.
Пример:
Входные данные :
{ « Ошибка синтаксического анализа Katex: Ожидаемая '}', получил 'EOF' в конце ввода: ... "соседей": [{» ID»:„2“,„соседи“: [{" Katex ошибка синтаксического анализа: Ожидаемая ' EOF», получил '}' в позиции 9: реф ":" 1 "}, {" ID»: „3“, „соседи“: [{ « Katex ошибка синтаксического анализа: Ожидаемая 'EOF', получил '}' в позиция 9: исх ":" 2 "}, {" ID»:„4“,„соседи“: [{« Katex ошибка синтаксического анализа: Ожидаемая 'EOF', получил '}' в позиции 9: реф ":" 3 "}, {" исх»:„1“}],„вал“: 4}],„вал“: 3}],„вал“: 2}, { "$ исх":„4“}], «вал»: 1}
Объяснение:
. Узел 1 APOS значение равно 1, и имеет два соседей:. Узел 2 и 4.
APOS значения узла-равно 2, и имеет два соседей:. Узел 1 и 3.
Узел значения 3 APOS IS 3, и имеют два соседей:.. Узел- 4. и
. значение узла APOS 4. Фиг.4, и имеет два соседей: узел 1 и 3..
Код
клонировал же время , чтобы гарантировать , что новый узел только один раз, но к счастью , значение Val-1 может быть использован в качестве опорных узлов.
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> neighbors;
public Node() {}
public Node(int _val,List<Node> _neighbors) {
val = _val;
neighbors = _neighbors;
}
};
*/
class Solution {
public Node cloneGraph(Node node) {
if(node == null) return node;
Node copyNode = new Node(node.val, new ArrayList<Node>());
Node[] nodes = new Node[100];
nodes[node.val-1] = copyNode;
dfs(copyNode, node, nodes);
return copyNode;
}
public void dfs(Node copyNode, Node node, Node[] nodes) {
for(Node n : node.neighbors){
if(nodes[n.val-1] != null){
copyNode.neighbors.add(nodes[n.val-1]);
continue;
}
Node temp = new Node(n.val, new ArrayList<Node>());
nodes[n.val-1] = temp;
copyNode.neighbors.add(temp);
dfs(temp, n, nodes);
}
}
}