[LeetCode]: 133: Clone Graph
2015-10-16 11:50
453 查看
题目:
Clone an undirected graph. Each node in the graph contains a
OJ's undirected graph serialization:
Nodes are labeled uniquely.
We use
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
Second node is labeled as
Third node is labeled as
Visually, the graph looks like the following:
题目分析:
题目本身就是个图的遍历问题,其实只用看最上面的一句就OK了。下面整这么一篇就是为了说明Testcase,结果误导对了我好久。
与树的遍历不同之处就是图可能会出现"闭合的环"这样会造成无线循环,所以遍历的时候需要把已经遍历过的点去掉。
根据题目,图中每一个点的权值是不一样的,所以可以采用取巧的方法检测这个点是否已经加在了图中,即使用HashMap
思路一:深度优先搜索
思路二:广度优先搜索
XXX
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 / \ \_/
题目分析:
题目本身就是个图的遍历问题,其实只用看最上面的一句就OK了。下面整这么一篇就是为了说明Testcase,结果误导对了我好久。
与树的遍历不同之处就是图可能会出现"闭合的环"这样会造成无线循环,所以遍历的时候需要把已经遍历过的点去掉。
根据题目,图中每一个点的权值是不一样的,所以可以采用取巧的方法检测这个点是否已经加在了图中,即使用HashMap
思路一:深度优先搜索
public static UndirectedGraphNode cloneDFS(UndirectedGraphNode node,HashMap<Integer, UndirectedGraphNode> validator){ if(validator.containsKey(node.label)){ return validator.get(node.label); } UndirectedGraphNode nodeTemp = new UndirectedGraphNode(node.label); validator.put(node.label, nodeTemp); for(int i =0;i<node.neighbors.size();i++){ nodeTemp.neighbors.add(cloneDFS(node.neighbors.get(i),validator)); } return nodeTemp; } public static UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if(node== null || node.equals(null)){ return null; } HashMap<Integer, UndirectedGraphNode> validator = new HashMap<Integer, UndirectedGraphNode>(); return cloneDFS(node, validator); }
思路二:广度优先搜索
XXX
相关文章推荐
- tp中phpexcel导出实例
- <button>和<input type="button"> 的区别
- ArcGIS Server发布地图服务学习教程
- 基于apache.tools.zip压缩文件(夹)
- IOS Post请求与GET请求
- 5个经典的JavaScript面试基础问题
- l2tp ubuntu
- MySQL数据库知识点
- TCP/IP、Http、Socket的区别
- 新东西011--Android Fragment常见错误分析
- Java基础---Stackoverflow上人气最旺的10个Java问题
- catalan数
- Arrays.asList()参数不同,返回的数据不同的原因?
- 马云:钱不是靠省出来的,有时候是靠投资、花钱和享受
- .net mail 发送
- 进制总结
- GPS坐标(经纬度)转换为百度坐标(经纬度)的JAVA方法
- Java入门到精通——调错篇之Spring2.5利用aspect实现AOP时报错: error at ::0 can't find referenced pointcut XXX 分类: Java从
- nfs加kerberos
- 代码改变世界,改变开发模式。