广度优先搜索简单改进

时间:2019-02-14 15:47:23

标签: breadth-first-search

在大多数资源中,BFS的实现是这样的(这是geeks for geeks的实现):

void findpaths(vector<vector<int> >&g, int src,  
                             int dst, int v) 
{ 
// create a queue which stores 
// the paths 
queue<vector<int> > q; 

// path vector to store the current path 
vector<int> path; 
path.push_back(src); 
q.push(path); 
while (!q.empty()) { 
    path = q.front(); 
    q.pop(); 
    int last = path[path.size() - 1]; 

    // if last vertex is the desired destination 
    // then print the path 
    if (last == dst)  
        printpath(path);         

    // traverse to all the nodes connected to  
    // current vertex and push new path to queue 
    for (int i = 0; i < g[last].size(); i++) { 
        if (isNotVisited(g[last][i], path)) { 
            vector<int> newpath(path); 
            newpath.push_back(g[last][i]); 
            q.push(newpath); 
        } 
    } 
} 

以上实现建议我们首先将邻居添加到队列中,然后再检查它是否是我们的目的地。

但是当将邻居添加到队列中时,我们可以简单地检查邻居是否为目的地(而不是在轮到该节点时检查邻居),尽管这是非常小的改进,但它比最后一个要好。那么为什么每个人都使用以前的方法来实现BFS?

0 个答案:

没有答案