Clone Graph leetcode

来源:互联网 发布:网络seo 编辑:程序博客网 时间:2024/06/05 16:34

Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors.

这里使用深度优先搜索。这样可以递归实现,如果是宽度优先,就要额外使用queue容器。

关键点:

1 这里的clone需要深度拷贝,就是要使用new操作了

2 防止回路无限循环,就要使用hash表,这里使用unordered_map记录访问过的节点。因为这里的label应该是唯一的才对,所以可以直接使用label作为关键字就可以。

/** * Definition for undirected graph. * struct UndirectedGraphNode { *     int label; *     vector<UndirectedGraphNode *> neighbors; *     UndirectedGraphNode(int x) : label(x) {}; * }; */class Solution {public:    UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {        unordered_map<int,UndirectedGraphNode*> visit;        return dsf(node,visit);    }    UndirectedGraphNode* dsf(UndirectedGraphNode* node,unordered_map<int,UndirectedGraphNode*>& visit) {        if(node == nullptr)            return nullptr;        if(visit.find(node->label)!= visit.end())            return visit[node->label];        UndirectedGraphNode* newNode = new UndirectedGraphNode(node->label);        newNode->neighbors.resize(node->neighbors.size());        visit.insert(make_pair(node->label,newNode));        for(int i=0;i<node->neighbors.size();i++) {            newNode->neighbors[i] = dsf(node->neighbors[i],visit);        }        return newNode;    }};


0 0