leetcode#133 克隆图
题目:
给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。
图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。
class Node {
public int val;
public List<Node> neighbors;
}
思路:
图的遍历,要注意的问题是,怎么确定一个点是已经被建立过了,我们用哈希表,对每一个点做一个映射,从当前点映射到克隆点。对已经建立过的点不必再搜索。
代码:
/*
// Definition for a Node.
class Node {
public:
int val;
vector<Node*> neighbors;
Node() {
val = 0;
neighbors = vector<Node*>();
}
Node(int _val) {
val = _val;
neighbors = vector<Node*>();
}
Node(int _val, vector<Node*> _neighbors) {
val = _val;
neighbors = _neighbors;
}
};
*/
class Solution
{
public:
unordered_map<Node *, Node *> visited;
Node *dfs(Node *now)
{
if(!now) return now;
if (visited.find(now) != visited.end())
return visited[now];
Node *nowclone = new Node(now->val);
visited[now] = nowclone;
for (auto &i : now->neighbors)
nowclone->neighbors.push_back(dfs(i));
return nowclone;
}
Node *cloneGraph(Node *node)
{
return dfs(node);
}
};