在访问起始顶点的邻居之后BFS停止

时间:2018-04-22 07:44:10

标签: c++11 breadth-first-search maze

我正试图在迷宫上实施BFS搜索,特别是阿波罗和戴安娜迷宫拼图。在运行我的BFS算法时,添加起始顶点的初始邻居,但是添加后续邻居,导致算法在使用下面的示例迷宫运行时在三次迭代之后终止。我算法的代码是:

BFS_Algo(){

NodeQueue.push(NodeMatrix[0][0]);


while( !NodeQueue.empty() )
{
    Node current;
    current = NodeQueue.front();
    NodeQueue.pop();

    if( !current.visited )
    {
        current.visited = true;

        for ( int i = 0; i < current.neighbors.size(); ++i )
        {
            if ( !current.neighbors[i].visited )
            {
                NodeQueue.push(current.neighbors[i]);
                current.neighbors[i].predecessor = &NodeMatrix[current.x][current.y];
            }
        }
    }
}



}

我知道邻居向量已正确填充,因为我有一个帮助函数,可以打印所有向量的内容,如下所示:

B E:  |R SE|R SW|
R SE: |empty vector
R SW: |B N|B N|
R SE: |B E|
B N:  |R SE|
R E:  |empty vector
B N:  |R SE|
B E:  |O O|
O O:  |empty vector

/ 空矢量表示没有邻居。 /

我不认为这是一个逻辑错误,但我觉得这可能更符合本地引用。任何指导都将不胜感激。


其他信息:
我已经从类似于这个例子的文件中读取了图表的信息:

B E |R SE|R SW|
R SE|B N |R E |
B N |B E |O O |

我创建了一个包含节点结构的类,该结构包含所有适当的数据。

private:

struct Node{

    int x;                          position in graph
    int y;                          position in graph
    std::string color;              graph attr
    std::string direction;          graph attr
    bool visited;                   bfs bool
    Node * predecessor;             ancestor for path backtracking
    std::vector<Node> neighbors;    vector of neighbors

};

short rows;
short columns;
Node **NodeMatrix;
std::queue<Node> NodeQueue;

0 个答案:

没有答案