复制无向图
#include<vector>
#include<unordered_map>
using namespace std;
struct UndirectedGraphNode {
int label;
vector<UndirectedGraphNode *> neighbors;
UndirectedGraphNode(int x) : label(x) {};
};
class Solution {
public:
unordered_map<UndirectedGraphNode*, UndirectedGraphNode*> nmap;
void dfs(UndirectedGraphNode* node)
{
if (node == nullptr)
return;
if (nmap.count(node))
return;
UndirectedGraphNode* pNode = new UndirectedGraphNode(node->label);
nmap[node] = pNode;
for (auto p:node->neighbors)
{
dfs(p);
}
}
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
UndirectedGraphNode* oldNode = node;
dfs(node);
for (auto nm : nmap)
{
for (auto nmfirst : nm.first->neighbors)
{
nm.second->neighbors.push_back(nmap[nmfirst]);
}
}
return nmap[oldNode];
}
};