我正试图在迷宫上实施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;