zoukankan      html  css  js  c++  java
  • LeetCode Clone Graph

    Clone an undirected graph. Each node in the graph contains a label and 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 #.

    1. First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
    2. Second node is labeled as 1. Connect node 1 to node 2.
    3. Third node is labeled as 2. Connect node 2 to node 2 (itself), thus forming a self-cycle.

    Visually, the graph looks like the following:

           1
          / 
         /   
        0 --- 2
             / 
             \_/
    

    题目意思是克隆一张图。

    我的解题思路是 先用bfs遍历原来的图,把label和节点加入到map中。

    然后新建一个复制节点的map,遍历原来map,第一遍遍历新建节点 加入到新map中,第二遍把邻节点list加到新节点中。

     1 /**
     2  * Definition for undirected graph.
     3  * class UndirectedGraphNode {
     4  *     int label;
     5  *     List<UndirectedGraphNode> neighbors;
     6  *     UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList<UndirectedGraphNode>(); }
     7  * };
     8  */
     9 public class Solution {
    10     private void     bfs(UndirectedGraphNode node,HashMap<Integer, UndirectedGraphNode> visitedmap) {
    11         
    12         LinkedList<UndirectedGraphNode> tovisitList = new LinkedList<>();
    13         
    14         tovisitList.addLast(node);
    15         while (!tovisitList.isEmpty()) {
    16             UndirectedGraphNode first = tovisitList.getFirst();
    17             tovisitList.removeFirst();
    18             visitedmap.put(first.label, first);
    19             for (UndirectedGraphNode undirectedGraphNode : first.neighbors) {
    20                 if (!visitedmap.containsKey(undirectedGraphNode.label)&&!tovisitList.contains(undirectedGraphNode)) {
    21                     tovisitList.addLast(undirectedGraphNode);
    22                 }
    23             }
    24         }
    25         
    26     }
    27     public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
    28         if (node==null) {
    29             return null;
    30         }
    31         UndirectedGraphNode newGraph = new UndirectedGraphNode(node.label);
    32         if (node.neighbors.isEmpty()) {
    33             return newGraph;
    34         }
    35         HashMap<Integer, UndirectedGraphNode> visitedmap=new HashMap<>();
    36         HashMap<Integer, UndirectedGraphNode> copymap=new HashMap<>();
    37         bfs(node, visitedmap);
    38         for (Integer key : visitedmap.keySet()) {
    39             copymap.put(key, new UndirectedGraphNode(key));
    40         }
    41         for (Integer key : visitedmap.keySet()) {
    42             for (UndirectedGraphNode tnode : visitedmap.get(key).neighbors) {
    43                 copymap.get(key).neighbors.add(copymap.get(tnode.label));
    44             }
    45         }
    46         return copymap.get(node.label);
    47         
    48     }
    49     
    50 
    51 }
  • 相关阅读:
    Lambda Expression in C#
    DirectorySearcher LDAP
    摘录 LDAP
    The return types for the following stored procedures could not be detected
    无法调试存储过程,无法启动T-SQL调试
    根据窗口句柄显示窗体
    还原数据库时提示空间不足
    xml格式发送
    ../ 上一级目录
    匿名函数 invoke
  • 原文地址:https://www.cnblogs.com/birdhack/p/3973589.html
Copyright © 2011-2022 走看看