Clone Graph
2016-05-31 18:33
507 查看
updated: 06/10, 我们必须深刻理解什么是clone,不要将引用克隆
典型的bfs遍历问题,基本功
很棒的代码点击打开链接
curNodeClone.neighbors.add(curNodeNeighborClone);加入的是clone,而不是现有的引用
典型的bfs遍历问题,基本功
很棒的代码点击打开链接
/** * @param node: A undirected graph node * @return: A undirected graph node */ public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) { if (node == null) { return null; } // 放原始node和其复制品 Map<UndirectedGraphNode, UndirectedGraphNode> map = new HashMap<>(); // BFS用的queue List<UndirectedGraphNode> list = new LinkedList<UndirectedGraphNode>(); // 根节点的复制 UndirectedGraphNode nodeClone = new UndirectedGraphNode(node.label); // 把根节点和其复制品放入map map.put(node, nodeClone); //添加入队列 list.add(node); while (!list.isEmpty()) { // 当前处理对象 UndirectedGraphNode curNode = list.remove(0); // 得到当前原始对象的所有neighbor ArrayList<UndirectedGraphNode> curNodeNeighbors = curNode.neighbors; // 当前处理对象的复制品,必定在map里,因为在前面的neighbor里已经被创建 UndirectedGraphNode curNodeClone = map.get(curNode); for (UndirectedGraphNode curNodeNeighbor: curNodeNeighbors) { if (map.containsKey(curNodeNeighbor)) { //UndirectedGraphNode curNodeClone = map.get(curNode); // 之前已经被复制过的neighbor UndirectedGraphNode curNodeNeighborClone = map.get(curNodeNeighbor); // 就直接从map里取出neighborClone, 给curClone添加复制的neighbor curNodeClone.neighbors.add(curNodeNeighborClone); } else { // 如果该neighbor没有被复制过,则新建neighborClone UndirectedGraphNode curNodeNeighborClone = new UndirectedGraphNode(curNodeNeighbor.label); //UndirectedGraphNode curNodeClone = map.get(curNode); curNodeClone.neighbors.add(curNodeNeighborClone); // 并且添加到队列里为了将来的遍历 list.add(curNodeNeighbor); // 存储到map里 map.put(curNodeNeighbor, curNodeNeighborClone); } } } return nodeClone; }
相关文章推荐
- CentOS 6.4 x64 zabbix 2.2.2 编译安装
- PAT (Advanced Level) 1053. Path of Equal Weight (30)
- mysql索引优化
- A + B 问题
- 最佳优先搜索(Best-First Search)
- UITableView使用详解及技巧大全
- Android获取系统震动的调用
- stringbuild和stringbuffer的区别
- CentOS 6.4 x64 Percona-Server-5.6.15 源码安装
- Monitorix 监控 安装配置
- Peer-to-Peer 综述
- 关于写博客的初心
- iOS通讯录排序与显示
- JQuery中的样式切换
- 配置 nginx location 实时查看 php-fpm 的状态
- CentOS 6.4 x64 安装 配置 Redmine 2.4.1
- MySQL必知必会——命令行使用MySQL图文教程
- imageloder缓存图片
- linux 系统安装后网卡配置,解决不能上网(重启后不能上网)(新手篇)
- 一位女程序员的奋斗路程