朴素BFS
-
朴素BFS已经很熟悉了,从起点开始遍历每层的可能,到第N层时,其搜索空间回到2N,其所占空间会非常巨大
为了解决这一问题,有了双端BFS
//邻接表
unordered_map<int, vector<int>> edges;
void BFS() {
queue<int> Q;
while(!Q.empty()) {
auto x = Q.front();
Q.pop();
for(auto e : edges[x]) {
Q.push(e);
}
}
}
双端BFS
-
双端BFS主要思路是从两端同时进行BFS,当碰见对方遍历过的结点的时候就可以输出了