Clone Graph
2016-02-15 21:13
316 查看
题目
Clone an undirected graph. Each node in the graph contains a
labeland
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 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 / \ \_/
方法
主要分两步:第一步创建全部的结点。第二步,创建结点的neighbors
/** * Definition for undirected graph. * class UndirectedGraphNode { * int label; * List<UndirectedGraphNode> neighbors; * UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); } * }; */ public class Solution { public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node == null) { return null; } Map<Integer, UndirectedGraphNode> map = new HashMap<Integer, UndirectedGraphNode>(); Map<Integer, UndirectedGraphNode> graph = new HashMap<Integer, UndirectedGraphNode>(); Queue<UndirectedGraphNode> queue = new LinkedList<UndirectedGraphNode>(); queue.offer(node); while(!queue.isEmpty()) { UndirectedGraphNode temp = queue.poll(); if (!map.containsKey(temp.label)) { UndirectedGraphNode newTemp = new UndirectedGraphNode(temp.label); graph.put(temp.label, temp); map.put(temp.label, newTemp); } for (UndirectedGraphNode neighbor : temp.neighbors) { if (!map.containsKey(neighbor.label)) { queue.offer(neighbor); } } } for (int label : graph.keySet()) { UndirectedGraphNode temp = graph.get(label); UndirectedGraphNode cloneTemp = map.get(temp.label); for (UndirectedGraphNode neighbor : temp.neighbors) { cloneTemp.neighbors.add(map.get(neighbor.label)); } } return map.get(node.label); } }
相关文章推荐
- GitLab 之 Linux十分钟快装
- 【poj3614】Sunscreen
- OPENCV版本的单目标定示例代码(张正友)
- 触发器---一张表更新另一张表同步更新
- LightOJ 1422 Halloween Costumes
- 《machine learning with spark》学习笔记--文本挖掘
- Service(服务)
- .net程序命名规则
- xml解析之DOM
- 一位极客美女打造了一款能为她做“口活”的装置
- svn配置
- bootstrap起步
- C++之路进阶——最小费用最大流(星际竞速)
- C++ STL 一般总结
- 战五渣系列之六(5分钟还搞不懂多线程?)
- 初识继承和多态
- 大数据究竟是什么
- android使用全局变量的两种方法
- 【牛腩】完整版IIS配置并发布自己第一个网站
- 数组&链表