程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [LeetCode]Clone Graph

[LeetCode]Clone Graph

編輯:C++入門知識

[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
             / \
             \_/

    利用遞歸深搜,同時用一個map存儲已經 new 過的node,如果已經new 過則直接返回存在map裡的節點

    /**
     * Definition for undirected graph.
     * class UndirectedGraphNode {
     *     int label;
     *     List neighbors;
     *     UndirectedGraphNode(int x) { label = x; neighbors = new ArrayList(); }
     * };
     */
    public class Solution {
    	Map map  = new HashMap<>();
    	public UndirectedGraphNode cloneGraph(UndirectedGraphNode node) {
    		if (node == null)
    			return null;
    		if(map.containsKey(node)){
    			return map.get(node);
    		}
    		UndirectedGraphNode ug = new UndirectedGraphNode(node.label);
    		map.put(node, ug);
    		for (int i = 0; i < node.neighbors.size(); i++) {
    				ug.neighbors.add(cloneGraph(node.neighbors.get(i)));
    		}
    		return ug;
    	}
    }




  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved