随便画了个简单的DAG, 如下图,
如果用DFS的话,假如我用一个queue,
enqueue root, 然check队列是否为空,不为空就enqueue children(neighbors),
在dequeue node 2的时候,enqueue node 4&5,
在dequeue node 3的时候,不应该enqueue node 5,对吧?因为5已经被访问了,如何
记录这个Node是不是已经被访问过呢(不改动原本的DS)。
想到一个方法是可以用一个数组保存所有被访问过的Node地址,每次进队看是不是在这
个数组里。
如果用递归来做应该也是可行的吧。
class Node{
public:
int value;
vector neighbors;
};
vector visited;
bool isNodeVisited(Node *n)
{
vector::iterator it;
it = find(visited.begin(), visited.end(), n);
return it != visited.end();
}
Node *copyGraph(Node* root) {
if (root) return NULL;
Node* newR = new Node;
newR->value = root->value;
vector& nei = root.neighbors;
vector newNei;
for (int i=0; i{
if (!isNodeVisited(nei[i])){
newNei.push_back(copyGraph(nei[i]));
}
}
newR->neighbors = newNei;
return newR;
}
求前辈们指教!