diff --git a/cpp/2202/220223.cpp b/cpp/2202/220223.cpp new file mode 100644 index 0000000..8f3a8b2 --- /dev/null +++ b/cpp/2202/220223.cpp @@ -0,0 +1,69 @@ +#include +#include +#include +#include +#include + +/** + * Definition for a Node. + */ +class Node { +public: + int val; + std::vector neighbors; + explicit Node(int v = 0, std::vector arr = std::vector()) : val(v), neighbors(std::move(arr)) {} +}; + + +class Solution { +public: + static Node* cloneGraph(const Node* const node) { + if (!node) + return nullptr; + + const Node* original[101]{}; + std::unordered_map m; + Node* pool[101]{}; + + std::queue q; + q.push(original[node->val] = node); + while (!q.empty()) { + const Node* t = q.front(); + q.pop(); + + for (const Node* nx : t->neighbors) { + m[nx] = nx->val; + if (!original[nx->val]) { + q.push(original[nx->val] = nx); + // m[nx] = nx->val; + } + } + } + + for (int i = 0; i < 101; ++i) + if (original[i]) + pool[i] = new Node(i); + for (int i = 0; i < 101; ++i) { + if (original[i]) { + for (const Node* ptr : original[i]->neighbors) { + assert(pool[m[ptr]]); + pool[i]->neighbors.push_back(pool[m[ptr]]); + } + } + } + + return pool[node->val]; + } +}; + +int main() { + Node args[4]; + args[0] = Node(1, {args + 1, args + 3}); + args[1] = Node(2, {args, args + 2}); + args[2] = Node(3, {args + 1, args + 3}); + args[3] = Node(4, {args, args + 2}); + + Solution::cloneGraph(args); + + return 0; +} diff --git a/cpp/2202/CMakeLists.txt b/cpp/2202/CMakeLists.txt index 7139825..d97d44b 100644 --- a/cpp/2202/CMakeLists.txt +++ b/cpp/2202/CMakeLists.txt @@ -3,4 +3,4 @@ PROJECT(2202) SET(CMAKE_CXX_STANDARD 23) -ADD_EXECUTABLE(2202 220223-CN.cpp) +ADD_EXECUTABLE(2202 220223.cpp)