您的位置:首页 > 其它

Clone Graph 克隆图

2014-01-21 15:15 211 查看
/**

* Definition for undirected graph.

* struct UndirectedGraphNode {

* int label;

* vector<UndirectedGraphNode *> neighbors;

* UndirectedGraphNode(int x) : label(x) {};

* };

*/

class Solution {

public:

UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {

if(node==NULL) return NULL;

map<UndirectedGraphNode*,UndirectedGraphNode*> hasCopied;

queue<UndirectedGraphNode*> q;

hasCopied[node]=new UndirectedGraphNode(node->label);

q.push(node);

while(!q.empty())

{

UndirectedGraphNode *curnode=q.front();

q.pop();

for(int i=0;i<curnode->neighbors.size();i++)

{

UndirectedGraphNode *neighbornode=curnode->neighbors[i];

if(hasCopied.find(neighbornode)!=hasCopied.end())

{

hasCopied[curnode]->neighbors.push_back(hasCopied[neighbornode]);

}

else

{

hasCopied[neighbornode]=new UndirectedGraphNode(neighbornode->label);

hasCopied[curnode]->neighbors.push_back(hasCopied[neighbornode]);

q.push(neighbornode);

}

}

}

//key是原始结点,value是复制的结点。每个结点在队列里面复制了本身,但是没有复制邻居。

return hasCopied[node];

}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: