BFS 广度优先搜索

#include <queue>
#include <list>
#include "BFS.h"
using namespace std;

    BFS::BFS(int vertexCount){
        this->v = vertexCount;
        this->adj = new list<int>[v];
    }


    list<int> BFS::search(int s, int t){
        //最短路径结果集
        list<int> resultList;
        //需要遍历的邻接表index
        queue<int> startVertexQueue;
        //顶点访问标识,为true说明已经找到最短路径了,对应prev有值
        bool visited[v];
        //每个顶点到起点最近连线,的前一个顶点
        int prev[v];

        //-------------------初始化-------------------------------------------
        for (int i = 0; i < v; ++i) {
            visited[i] = false;
            prev[i] = -1;
        }
        //-------------------初始化起点----------------------------------------
        visited[s] = true;
        startVertexQueue.push(s);

        //-------------------开始循环所有邻接表---------------------------------
        while (startVertexQueue.size() != 0){
            //从待访问点队列里pop出一个点
            int thisRountStart = startVertexQueue.front();
            startVertexQueue.pop();


            list<int> adjThisR = adj[thisRountStart];
            list<int>::iterator it;
            for (it = adjThisR.begin(); it != adjThisR.end(); ++it) {
                int edgeVertex = *it;
                //如果之前没有访问过这个点,那么执行一些列操作
                if (!visited[edgeVertex]){
                    //标记访问标识为已访问,因为这是第一次访问,即当前路径是最短的,以后再次访问的时候,可以直接跳过
                    visited[edgeVertex] = true;
                    //
                    startVertexQueue.push(edgeVertex);
                    prev[edgeVertex] = thisRountStart;
                    //如果这个点是我们的目的地,那么返回路径
                    if (edgeVertex == t){
                        int index = t;
                        resultList.push_front(t);
                        while (prev[index] != -1){
                            resultList.push_front(prev[index]);
                            index = prev[index];
                        }
                        return resultList;
                    }
                    startVertexQueue.push(edgeVertex);
                }
            }
        }
        return resultList;
    }

posted on 2020-09-03 19:24  mindSucker  阅读(120)  评论(0编辑  收藏  举报