Clone Graph
2018-01-05 14:39
253 查看
Clone an undirected graph. Each node in the graph contains a
a list of its
How we serialize an undirected graph:
Nodes are labeled uniquely.
We use
and
As an example, consider the serialized graph
The graph has a total of three nodes, and therefore contains three parts as separated by
First node is labeled as
both nodes
Second node is labeled as
node
Third node is labeled as
node
Visually, the graph looks like the following:
labeland
a list of its
neighbors.
How we serialize an undirected graph:
Nodes are labeled uniquely.
We use
#as a separator for each node,
and
,as a separator for node label and each neighbor of the node.
As an example, consider the serialized graph
{0,1,2#1,2#2,2}.
The graph has a total of three nodes, and therefore contains three parts as separated by
#.
First node is labeled as
0. Connect node
0to
both nodes
1and
2.
Second node is labeled as
1. Connect node
1to
node
2.
Third node is labeled as
2. Connect node
2to
node
2(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / \ / \ 0 --- 2 / \ \_/
/** * Definition for undirected graph. * class UndirectedGraphNode { * int label; * ArrayList<UndirectedGraphNode> neighbors; * UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); } * }; */ public class Solution { /* * @param node: A undirected graph node * @return: A undirected graph node */ public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { // write your code here if (node == null) { return null; } Map<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>(); Queue<UndirectedGraphNode> queue = new LinkedList<>(); Set<UndirectedGraphNode> set = new HashSet<>(); queue.offer(node); set.add(node); while (!queue.isEmpty()) { UndirectedGraphNode root = queue.poll(); map.put(root, new UndirectedGraphNode(root.label)); ArrayList<UndirectedGraphNode> neighbors = root.neighbors; for (UndirectedGraphNode val : neighbors) { if (!set.contains(val)) { queue.offer(val); set.add(val); } } } for (UndirectedGraphNode val : map.keySet()) { for (UndirectedGraphNode temp : val.neighbors) { map.get(val).neighbors.add(map.get(temp)); } } return map.get(node); } }
相关文章推荐
- Clone Graph
- [LeetCode] 131: Clone Graph
- [Leetcode] Clone Graph (Java)
- Lintcode137 Clone Graph solution 题解
- LeetCode OJ - Clone Graph
- *Leetcode 133. Clone Graph DFS
- leetcode第18题(clone-graph)
- LeetCode: Clone Graph
- leetcode -- Clone Graph
- LeetCode Clone Graph
- LeetCode-Clone Graph
- Clone Graph
- Clone Graph
- 133 Clone Graph [Leetcode]
- LeetCode之Clone Graph
- LeetCode(133) Clone Graph
- LeetCode133 Clone Graph
- 【clone-graph】
- [LeetCode]Clone Graph
- Clone Graph