Leetcode 133.克隆图


克隆图

克隆一张无向图,图中的每个节点包含一个label(标签)和一个neighbors(邻接点)列表 。

OJ的无向图序列化:

节点被唯一标记。

我们用 # 作为每个节点的分隔符,用,作为节点标签和邻接点的分隔符。

例如,序列化无向图 {0,1,2#1,2#2,2}。

该图总共有三个节点, 被两个分隔符 #分为三部分。

  1. 第一个节点的标签为 0,存在从节点 0 到节点 1 和节点 2 的两条边。
  2. 第二个节点的标签为 1,存在从节点 1 到节点 2 的一条边。
  3. 第三个节点的标签为 2,存在从节点 2 到节点 2 (本身) 的一条边,从而形成自环。

我们将图形可视化如下:

 1 public class Solution {
 2     public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
 3         if(node==null)
 4             return null;
 5         Queue<UndirectedGraphNode> q=new LinkedList<UndirectedGraphNode>();
 6         HashMap<UndirectedGraphNode,UndirectedGraphNode> hash=new HashMap<UndirectedGraphNode,UndirectedGraphNode>();
 7         UndirectedGraphNode graph=new UndirectedGraphNode(node.label);
 8         q.add(node);
 9         hash.put(node,graph);
10         while(!q.isEmpty()){
11             UndirectedGraphNode curNode=q.poll();
12             List<UndirectedGraphNode> currNeighbos=curNode.neighbors;
13             for(UndirectedGraphNode myNode: currNeighbos){
14                 if(!hash.containsKey(myNode)){
15                     UndirectedGraphNode copy=new UndirectedGraphNode(myNode.label);
16                     hash.put(myNode,copy);
17                     hash.get(curNode).neighbors.add(copy);
18                     q.add(myNode);
19                 }else{
20                     hash.get(curNode).neighbors.add(hash.get(myNode));
21                 }
22             }
23         }
24         return graph;
25     }
26 
27 }

优质内容筛选与推荐>>
1、python-面向对象(四)——类成员的访问方式汇总
2、Log4Net Layout使用以及扩展
3、深入了解 JavaScript 中的 for 循环
4、《学习之道》第十三章练习大脑,改变思维
5、Leetcode 7 Reverse Integer


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号