LeetCode 133. 克隆图(图的BFS/DFS)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 133. 克隆图(图的BFS/DFS)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
給定無向連通圖中一個節點的引用,返回該圖的深拷貝(克隆)。圖中的每個節點都包含它的值 val(Int) 和其鄰居的列表(list[Node])。
class Node { public:int val;vector<Node*> neighbors;Node() {}Node(int _val, vector<Node*> _neighbors) {val = _val;neighbors = _neighbors;} };2. 解題
2.1 DFS
class Solution {Node* visited[101] = {NULL}; public:Node* cloneGraph(Node* node) {if(!node) return NULL;int size = node->neighbors.size();Node *root = new Node(node->val, vector<Node*> {});visited[node->val] = root;for (int i = 0; i < size; i++) {if (!visited[node->neighbors[i]->val])root->neighbors.push_back(cloneGraph(node->neighbors[i]));elseroot->neighbors.push_back(visited[node->neighbors[i]->val]);}return root;} };2.2 BFS
class Solution {bool visited[101] = {0}; public:Node* cloneGraph(Node* node) {if(!node) return NULL;unordered_map<int, Node*> m;//新節點值和它自己的指針unordered_map<Node*, vector<int>> nhb;//一個節點對應的鄰居的節點值queue<Node*> q;q.push(node);Node *root, *ans;visited[node->val] = 1;int i = -1, n;while(!q.empty()){n = q.front()->neighbors.size();root = new Node(q.front()->val, vector<Node*> {});if(i == -1)ans = root;m[q.front()->val] = root;for(i = 0; i < n; i++){nhb[root].push_back(q.front()->neighbors[i]->val);if(!visited[q.front()->neighbors[i]->val]){q.push(q.front()->neighbors[i]);visited[q.front()->neighbors[i]->val] = 1;}}q.pop();}for(auto it = nhb.begin(); it != nhb.end(); ++it){n = it->second.size();for(i = 0; i < n; i++){it->first->neighbors.push_back(m[it->second[i]]);}}return ans;} };總結
以上是生活随笔為你收集整理的LeetCode 133. 克隆图(图的BFS/DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 400. 第N个数字(
- 下一篇: LeetCode 第 18 场双周赛(1