LeetCode——复制图
来源:互联网 发布:生产计划编制软件 编辑:程序博客网 时间:2024/06/06 01:44
http://articles.leetcode.com/2012/05/clone-graph-part-i.html
BFS方法遍历图。为了防止重复遍历,使用hashmap,key为原图的node,value为新图的node。
我没有看原文的算法实现先是自己想了然后写上去。这样的过程中我碰到了一些问题。比如说什么时候创建新的节点?是在while的开始,还是在遍历相邻节点的时候?这点很重要。
实现:
package com.song.algorithm;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.LinkedList;import java.util.List;import java.util.Queue;public class Image {public static class Node {public int data;public List<Node> neighbors;}public Node head;public static Image copy(Image image) {Queue<Node> queue = new LinkedList<Node>();if (image.head == null) {return null;}Image cp = new Image();HashMap<Node, Node> map = new HashMap<Node, Node>();Node newHead = new Node();newHead.data = image.head.data;cp.head = newHead;map.put(image.head, newHead);queue.add(image.head);while (!queue.isEmpty()) {Node node = queue.remove();Node cnode = map.get(node);if (node.neighbors != null) {List<Node> cnodeNeighbors = new ArrayList<Node>();cnode.neighbors = cnodeNeighbors;for (Node n : node.neighbors) {if (map.get(n) == null) {Node newNode = new Node();newNode.data = n.data;map.put(n, newNode);cnodeNeighbors.add(newNode);queue.add(n);} else {cnodeNeighbors.add(map.get(n));}}}}return cp;}public static void iterate(Image image) {HashSet<Node> set = new HashSet<Node>();set.add(image.head);Queue<Node> queue = new LinkedList<Node>();queue.add(image.head);while (!queue.isEmpty()) {Node node = queue.remove();System.out.print(node.data + " ");if (node.neighbors != null) {for (Node n : node.neighbors) {if (!set.contains(n)) {queue.add(n);set.add(n);}}}}}public static void main(String[] args) {Image image = new Image();Node head = new Node();image.head = head;head.data = 1;ArrayList<Node> nei1 = new ArrayList<Node>();Node n2 = new Node();n2.data = 2;nei1.add(n2);head.neighbors = nei1;ArrayList<Node> nei2 = new ArrayList<Node>();Node n3 = new Node();n3.data = 3;nei2.add(n3);Node n4 = new Node();n4.data = 4;nei2.add(n4);n2.neighbors = nei2;ArrayList<Node> nei3 = new ArrayList<Node>();nei3.add(head);n4.neighbors = nei3;iterate(image);System.out.println("");Image image1 = copy(image);iterate(image1);}}
0 0
- LeetCode——复制图
- leetCode——随机链表复制
- leetcode(复制无向图)
- 深度复制链表——Leetcode系列(十三)
- Clone Graph 图的复制 @LeetCode
- [LeetCode]—Copy List with Random Pointer 深度复制带“任意指针”的链表
- leetcode无向图的复制之搜索
- [LeetCode]Copy List with Random Pointer &Clone Graph 复杂链表的复制&图的复制
- MySQL——复制
- MongoDB—主从复制
- MongoDB—主从复制
- 物化视图复制概念和体系结构——高级复制
- 物化视图复制概念和体系结构——高级复制
- 复制(1)——SQLServer 复制简介
- 原型模式——浅复制VS深复制
- 黑马程序员——浅复制与深复制
- 原型模式——浅复制和深复制
- 再会原型模式——深复制VS浅复制
- java中通过对象,javabean配置文件,反射属性值
- SpringMVC访问静态资源的几种方法
- mybatis 实现一对一,一对多,多对多关联查询 小结
- java模拟http调用百度识图
- js获取项目根路径
- LeetCode——复制图
- android studio 程序真机运行中文显示乱码
- GRE写作必备句型
- uva624 CD (01背包+路径的输出)
- Debug和Release区别
- iOS Sprite Kit教程之申请和下载证书
- C++ 线程(一)
- 【读书笔记】程序员的自我修养:链接、装载与库 第一章 温故而知新
- python 黑名单过滤