[Lintcode]Clone Graph
来源:互联网 发布:php在线加密 编辑:程序博客网 时间:2024/06/13 20:13
lone an undirected graph. Each node in the graph contains alabel
and 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 node0
to both nodes1
and2
. - Second node is labeled as
1
. Connect node1
to node2
. - Third node is labeled as
2
. Connect node2
to node2
(itself), thus forming a self-cycle.
Visually, the graph looks like the following:
1 / \ / \0 --- 2 / \ \_/
Example
return a deep copied graph.
关键是如何避免环和点。 此时可以使用额外的hashmap记录已经走过的点。如果走过了,直接从map中取出即可。
public class Solution { Map<Integer, UndirectedGraphNode> map = new HashMap<Integer, UndirectedGraphNode>(); /** * @param node: A undirected graph node * @return: A undirected graph node */ public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if(node == null) return null; UndirectedGraphNode tmp = new UndirectedGraphNode(node.label); map.put(node.label, tmp); ArrayList<UndirectedGraphNode> list = new ArrayList<UndirectedGraphNode>(); for(UndirectedGraphNode u : node.neighbors) { if(map.containsKey(u.label)) { tmp.neighbors.add(map.get(u.label)); } else { tmp.neighbors.add(cloneGraph(u)); } } return tmp; }}
0 0
- [Lintcode]Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- Clone Graph
- 手机中的网路类型概念
- 【图的dfs + bitset+ 套路】hihocoder. 1041
- C语言程序代码优化
- 相对路径和绝对路径的区别
- 数据结构实验之求二叉树后序遍历和层次遍历
- [Lintcode]Clone Graph
- 深入浅出 RPC - 深入篇
- 关键字
- 用html实现企业邮箱登陆界面
- HTTP请求报文和HTTP响应报文
- Spring AOP 各种通知
- C++与Oracle数据库的交互
- Android中单复数
- 二叉树的基本性质及使用实现