From e1402c780ad670299feaa9d653463d93ba955a96 Mon Sep 17 00:00:00 2001 From: Karan Siwach Date: Sun, 11 Oct 2020 12:56:51 +0530 Subject: [PATCH] Create Clone_Graph --- .../Clone_Graph.cpp | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Graph_Data-Structure_and_Algorithms/Clone_Graph.cpp diff --git a/Graph_Data-Structure_and_Algorithms/Clone_Graph.cpp b/Graph_Data-Structure_and_Algorithms/Clone_Graph.cpp new file mode 100644 index 0000000..5248f76 --- /dev/null +++ b/Graph_Data-Structure_and_Algorithms/Clone_Graph.cpp @@ -0,0 +1,62 @@ +/** + * Definition for undirected graph. + * struct UndirectedGraphNode { + * int label; + * vector neighbors; + * UndirectedGraphNode(int x) : label(x) {}; + * }; + */ +unordered_set s; +unordered_set S; +map M; +void solve(UndirectedGraphNode* cur) +{ + //cout<<(ptr->label)<<" "<<(cur->label)<label); + //UndirectedGraphNode* z=new UndirectedGraphNode(cur->label); + //(ptr->neighbors).push_back(z); + //(z->neighbors).push_back(ptr); + for(int i=0;i<(cur->neighbors).size();i++) + { + //cout<<(((cur->neighbors)[i])->label)<neighbors)[i])->label)==s.end()) + { + //UndirectedGraphNode* ptr=cur; + UndirectedGraphNode* ptr=new UndirectedGraphNode(((cur->neighbors)[i])->label); + (M[cur->label]->neighbors).push_back(ptr); + M[((cur->neighbors)[i])->label]=ptr; + solve((cur->neighbors)[i]); + } + else + { + (M[cur->label]->neighbors).push_back(M[((cur->neighbors)[i])->label]); + } + } +} +UndirectedGraphNode *Solution::cloneGraph(UndirectedGraphNode *node) { + if(node==NULL) return NULL; + UndirectedGraphNode* ans=new UndirectedGraphNode(node->label); + s.clear(); + S.clear(); + s.insert(node->label); + M[node->label]=ans; + for(int i=0;i<(node->neighbors).size();i++) + { + //(ans->neighbors).push_back() + //cout<<(((node->neighbors)[i])->label)<neighbors)[i])->label)==s.end()) + { + UndirectedGraphNode* ptr=new UndirectedGraphNode(((node->neighbors)[i])->label); + (ans->neighbors).push_back(ptr); + M[((node->neighbors)[i])->label]=ptr; + solve((node->neighbors)[i]); + } + else + { + (ans->neighbors).push_back(M[((node->neighbors)[i])->label]); + } + } + return ans; + +}