[算法作业][LeetCode] 133. Clone Graph
2017-03-19 23:07
281 查看
[算法作业][LeetCode] 133. 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 #.
First node is labeled as 0. Connect node 0 to both nodes 1 and 2.
Second node is labeled as 1. Connect node 1 to node 2.
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 / \ \_/
因为每一个node都需要保存到map中,保证下次需要的时候不再创建的同时,node链接的数据也能得到保留。
然后通过深搜来构造图即可。
/** * Definition for undirected graph. * struct UndirectedGraphNode { * int label; * vector<UndirectedGraphNode *> neighbors; * UndirectedGraphNode(int x) : label(x) {}; * }; */ class Solution { public: UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) { if (node == NULL) return NULL; int val = node->label; if (dict.find(val) != dict.end()) return dict[val]; UndirectedGraphNode* root = new UndirectedGraphNode(val); dict[val] = root; for (int i=0; i<node->neighbors.size(); ++i) { UndirectedGraphNode* tmp = cloneGraph(node->neighbors[i]); if (tmp == NULL) continue; root->neighbors.push_back(tmp); } return root; } private: map<int, UndirectedGraphNode*> dict; };
相关文章推荐
- 【算法作业2】LeetCode 492. Construct the Rectangle
- 【算法作业6】LeetCode 121. Best Time to Buy and Sell Stock
- 算法课程Leetcode作业第四周技术博客
- 【算法作业1】LeetCode 485. Max Consecutive Ones
- 算法课程Leetcode作业第二周技术博客
- 算法课程Leetcode作业第一周技术博客
- 【算法作业7】LeetCode 204. Count Primes
- 算法作业HW10:Leetcode92 Reverse Linked List II
- 【算法作业11】LeetCode 70. Climbing Stairs
- 算法课程Leetcode作业第三周技术博客
- 【算法作业15】LeetCode 357. Count Numbers with Unique Digits
- 【算法作业3】LeetCode 169. Majority Element
- 【算法作业10】LeetCode 53. Maximum Subarray
- 【算法作业13】LeetCode 338. Counting Bits
- 算法作业HW25:LeetCode 26. Remove Duplicates from Sorted Array
- 算法课程第六周Leetcode作业
- 【算法作业9】LeetCode 455. Assign Cookies
- 【算法作业14】LeetCode 413. Arithmetic Slices
- [算法作业][LeetCode] 50. Pow(x, n) -- 分治法
- [算法作业-动态规划][LeetCode] 97. Interleaving String