LeetCode Clone Graph

Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.


OJ's undirected graph serialization:

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 #.

  1. First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
  2. Second node is labeled as 1. Connect node 1 to node 2.
  3. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.

 

Visually, the graph looks like the following:

       1
      / \
     /   \
    0 --- 2
         / \
         \_/

 

题目意思是克隆一张图。

我的解题思路是 先用bfs遍历原来的图,把label和节点加入到map中。

然后新建一个复制节点的map,遍历原来map,第一遍遍历新建节点 加入到新map中,第二遍把邻节点list加到新节点中。

 

 1 /**
 2  * Definition for undirected graph.
 3  * class UndirectedGraphNode {
 4  *     int label;
 5  *     List<UndirectedGraphNode> neighbors;
 6  *     UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
 7  * };
 8  */
 9 public class Solution {
10     private void     bfs(UndirectedGraphNode node,HashMap<Integer, UndirectedGraphNode> visitedmap) {
11         
12         LinkedList<UndirectedGraphNode> tovisitList = new LinkedList<>();
13         
14         tovisitList.addLast(node);
15         while (!tovisitList.isEmpty()) {
16             UndirectedGraphNode first = tovisitList.getFirst();
17             tovisitList.removeFirst();
18             visitedmap.put(first.label, first);
19             for (UndirectedGraphNode undirectedGraphNode : first.neighbors) {
20                 if (!visitedmap.containsKey(undirectedGraphNode.label)&&!tovisitList.contains(undirectedGraphNode)) {
21                     tovisitList.addLast(undirectedGraphNode);
22                 }
23             }
24         }
25         
26     }
27     public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
28         if (node==null) {
29             return null;
30         }
31         UndirectedGraphNode newGraph = new UndirectedGraphNode(node.label);
32         if (node.neighbors.isEmpty()) {
33             return newGraph;
34         }
35         HashMap<Integer, UndirectedGraphNode> visitedmap=new HashMap<>();
36         HashMap<Integer, UndirectedGraphNode> copymap=new HashMap<>();
37         bfs(node, visitedmap);
38         for (Integer key : visitedmap.keySet()) {
39             copymap.put(key, new UndirectedGraphNode(key));
40         }
41         for (Integer key : visitedmap.keySet()) {
42             for (UndirectedGraphNode tnode : visitedmap.get(key).neighbors) {
43                 copymap.get(key).neighbors.add(copymap.get(tnode.label));
44             }
45         }
46         return copymap.get(node.label);
47         
48     }
49     
50 
51 }

 

posted @ 2014-09-15 20:41  birdhack  阅读(177)  评论(0编辑  收藏  举报