Clone an undirected graph. Each node in the graph contains a
label
and a list of its
neighbors
.
Clone an undirected graph. Each node in the graph contains a
label
and a list of its neighbors
.#include<iostream>
#include<vector>
#include<map>
#include<queue>
using namespace std;
struct UndirectedGraphNode {
int label;
vector<UndirectedGraphNode *> neighbors;
UndirectedGraphNode(int x) : label(x) {};
};
UndirectedGraphNode *cloneGraph(const UndirectedGraphNode *node) {
if (node == NULL) {
return NULL;
}
map<const UndirectedGraphNode*, UndirectedGraphNode*> gphMap;
queue<const UndirectedGraphNode *> gphQue;
gphQue.push(node);
gphMap[node] = new UndirectedGraphNode(node->label);
while (!gphQue.empty()) {
const UndirectedGraphNode *tmp = gphQue.front();
gphQue.pop();
for (int i = 0; i != tmp->neighbors.size(); ++i){
if (gphMap.find(tmp->neighbors[i]) == gphMap.end()){
//build the vertex
UndirectedGraphNode *newNode = new UndirectedGraphNode(tmp->neighbors[i]->label);
gphMap[tmp->neighbors[i]] = newNode;
gphMap[tmp]->neighbors.push_back(newNode); //Adjust the Vertex
gphQue.push(tmp->neighbors[i]);
}
else{
gphMap[tmp]->neighbors.push_back(gphMap[tmp->neighbors[i]]);
}
}
}
return gphMap[node];
}
int main(){
return 0;
}