-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path133.cpp
51 lines (44 loc) · 1.48 KB
/
133.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/**
* Definition for undirected graph.
* struct UndirectedGraphNode {
* int label;
* vector<UndirectedGraphNode *> neighbors;
* UndirectedGraphNode(int x) : label(x) {};
* };
*/
// BFS 格式上比较难处理
class Solution {
public:
UndirectedGraphNode *cloneGraph(UndirectedGraphNode *node) {
if(node == NULL) return NULL;
UndirectedGraphNode* root = new UndirectedGraphNode(node->label);
map<UndirectedGraphNode*, bool> isused;
map<UndirectedGraphNode*, UndirectedGraphNode*> res;
queue<UndirectedGraphNode*> que;
res[node] = root;
que.push(node);
UndirectedGraphNode* curNode;
UndirectedGraphNode* newNode;
UndirectedGraphNode* childNode;
while(!que.empty())
{
curNode = que.front();
que.pop();
if(isused[curNode]) continue;
newNode = res[curNode];
isused[curNode] = true;
for(int i = 0; i < (curNode->neighbors).size(); i++)
{
childNode = curNode->neighbors[i];
if(!res[childNode])
{
UndirectedGraphNode* temNode = new UndirectedGraphNode(childNode->label);
res[childNode] = temNode;
}
newNode->neighbors.push_back(res[childNode]);
que.push(childNode);
}
}
return root;
}
};