From 31043a54dccd719c104cbb0755b2e4d06ecb7035 Mon Sep 17 00:00:00 2001 From: Eatswap Date: Sat, 8 Apr 2023 15:12:36 +0800 Subject: [PATCH] add: 230408 --- cpp/2304/230408.cpp | 59 +++++++++++++++++++++++++++++++++++++++++ cpp/2304/CMakeLists.txt | 2 +- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 cpp/2304/230408.cpp diff --git a/cpp/2304/230408.cpp b/cpp/2304/230408.cpp new file mode 100644 index 0000000..2fb7321 --- /dev/null +++ b/cpp/2304/230408.cpp @@ -0,0 +1,59 @@ +#include +#include +#include +#include + +class Node { +public: + int val; + std::vector neighbors; + Node() { + val = 0; + neighbors = std::vector(); + } + explicit Node(int _val) { + val = _val; + neighbors = std::vector(); + } + Node(int _val, std::vector _neighbors) { + val = _val; + neighbors = _neighbors; + } +}; + +/** + * 133. Clone Graph + * + * Given a reference of a node in a connected undirected graph. + * Return a deep copy (clone) of the graph. + * Each node in the graph contains a value (int) and a list (List[Node]) of its neighbors. + */ + +class Solution { +public: + static Node* cloneGraph(Node*); +}; + +Node* Solution::cloneGraph(Node* node) { + if (!node) + return nullptr; + Node* s = new Node[102]; + std::bitset<102> vis; + for (int i = 0; i < 102; ++i) + s[i].val = i; + std::queue q; + q.push(node); + vis[node->val] = true; + while (!q.empty()) { + auto* ptr = q.front(); + q.pop(); + for (auto&& np : ptr->neighbors) { + s[ptr->val].neighbors.push_back(s + np->val); + if (!vis[np->val]) { + vis[np->val] = true; + q.push(np); + } + } + } + return s + node->val; +} diff --git a/cpp/2304/CMakeLists.txt b/cpp/2304/CMakeLists.txt index 0c2616b..6f5347f 100644 --- a/cpp/2304/CMakeLists.txt +++ b/cpp/2304/CMakeLists.txt @@ -4,4 +4,4 @@ PROJECT(2304) SET(CMAKE_CXX_STANDARD 23) SET(CMAKE_EXPORT_COMPILE_COMMANDS true) -ADD_EXECUTABLE(2304 230408-CN.cpp) +ADD_EXECUTABLE(2304 230408.cpp)