코테준비 - Clone Graph

정상화·2023년 2월 26일

LeetCode

목록 보기
130/222

Clone Graph

class Solution {
public:
    Node* cloneGraph(Node* node) {
        if (node == nullptr) {
            return nullptr;
        }
        vector<vector<bool>> edgeVisited (101, vector<bool>(101, false));
        vector<Node *> arr(101, nullptr);
        Node *root = new Node(node->val);
        arr[node->val] =  root;
        dupNode(root, node, edgeVisited, arr);
        return root;
    }

    void dupNode(Node *duplicated, Node *original, vector<vector<bool>> &edgeVisited, vector<Node *> &nodeArr) {
        cout << "\n"<< duplicated->val << ": ";
        for (auto &neighbor: original->neighbors) {
            cout << neighbor->val << "=";
            if (!edgeVisited[original->val][neighbor->val] && !edgeVisited[neighbor->val][original->val]) {
                cout << "O";
                edgeVisited[original->val][neighbor->val] = edgeVisited[neighbor->val][original->val] = true;
                Node *dupNeighbor;
                if (nodeArr[neighbor->val] == nullptr) {
                    dupNeighbor = new Node(neighbor->val);
                    nodeArr[neighbor->val] = dupNeighbor;
                } else {
                    dupNeighbor = nodeArr[neighbor->val];
                }

                duplicated->neighbors.emplace_back(dupNeighbor);
                dupNeighbor->neighbors.emplace_back(duplicated);
                dupNode(dupNeighbor, neighbor, edgeVisited, nodeArr);
            }
            cout << "\n";
        }
    }
};
profile
백엔드 희망

0개의 댓글