Clone Graph
题目地址:
https://leetcode.com/problems/clone-graph/#/description
题目:
OJ's undirected graph serialization:
解题思路:
这道题就是用bfs的思想,用一个map来存储新的node,用queue来存储原来的node然后做bfs。
代码:
https://leetcode.com/problems/clone-graph/#/description
题目:
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
#.- First node is labeled as
0. Connect node0to both nodes1and2. - Second node is labeled as
1. Connect node1to node2. - Third node is labeled as
2. Connect node2to node2(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1
/ \
/ \
0 --- 2
/ \
\_/
解题思路:
这道题就是用bfs的思想,用一个map来存储新的node,用queue来存储原来的node然后做bfs。
代码:
public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if(node == null){ return null; } Map<Integer, UndirectedGraphNode> map = new HashMap<>(); UndirectedGraphNode tempNode = new UndirectedGraphNode(node.label); map.put(node.label, tempNode); Queue<UndirectedGraphNode> q = new LinkedList<>(); q.offer(node); while(!q.isEmpty()){ UndirectedGraphNode pollNode = q.poll(); UndirectedGraphNode newNode = map.get(pollNode.label); for(UndirectedGraphNode n : pollNode.neighbors){ if(map.containsKey(n.label)){ UndirectedGraphNode neighbor = map.get(n.label); newNode.neighbors.add(neighbor); } else{ q.offer(n); UndirectedGraphNode temp = new UndirectedGraphNode(n.label); newNode.neighbors.add(temp); map.put(n.label, temp); } } } return map.get(node.label); }

Comments
Post a Comment