宽度优先搜索:宽度优先,使用队列实现
深度优先搜索:深度优先,使用队列实现
例如下图,
使用BSF,遍历顺序为1,2,3,4,5,6,7; 使用DSF顺序为1, 2, 4, 5, 3, 6, 7
节点类型:
class Node {
public:
int value;
vector<Node*> nexts; //该节点的next节点
Node(int v) : value(v){ }
};
BSF实现代码
void bfs(Node* node) {
if (node == NULL) {
return;
}
queue<Node*> q;
set<Node*> s;//用来记录那些节点访问过
queue.push(node);
s.insert(node);
while (!queue.empty()) {
Node* cur = q.front();
q.pop()
cout << cur->value << endl;
for (Node* next : cur->nexts) {
if (!s.count(next)) {
s.insert(next);
q.push(next);
}
}
}
}
DSF实现代码:
//第一次压入栈的时候访问
void dfs(Node* node) {
if (node == NULL) {
return;
}
Stack<Node*> st;
set<Node*> s;
st.push(node);
s.insert(node);
cout << node->value << endl;
while (!st.empty()) {
Node* cur = st.top();
st.pop()
for (Node* next : cur->nexts) {
if (!s.count(next)) {
st.push(cur);
st.push(next);
s.insert(next);
cout << next->value << endl;
break;
}
}
}
}