Beispiel #1
0
GraphNode *cloneGraphRe(GraphNode *node, MAP &exist) {
    if (!node) return NULL;
    if (exist.find(node) != exist.end())
        return exist[node];
    GraphNode *newNode = new GraphNode(node->data);
    exist[node] = newNode;
    for (int i = 0; i < node->neighbors.size(); ++i)
        newNode->neighbors.push_back(cloneGraphRe(node->neighbors[i], exist));
    return newNode;
}
Beispiel #2
0
 UndirectedGraphNode *cloneGraphRe(UndirectedGraphNode *node, map<UndirectedGraphNode*, UndirectedGraphNode*> &visited) {
     if (node == NULL)
         return NULL;
     if (visited.find(node) != visited.end()) {
         return visited[node];
     }
     UndirectedGraphNode *newnode = new UndirectedGraphNode(node->label);
     visited[node] = newnode;
     for (auto iter = node->neighbors.begin(); iter != node->neighbors.end(); iter++) {
         UndirectedGraphNode * sub = cloneGraphRe(*iter, visited);
         newnode->neighbors.push_back(sub);
     }
     return newnode;
 }
Beispiel #3
0
GraphNode *cloneGraph(GraphNode *node) {
    MAP exist;
    return cloneGraphRe(node, exist);
}
Beispiel #4
0
 UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
     map<UndirectedGraphNode*, UndirectedGraphNode*> visited;
     return cloneGraphRe(node ,visited);
 }