广度优先搜索未找到正确的路径
Breadth First Search not finding correct path
所以我有一个实验室来使用邻接矩阵实现广度优先搜索和深度优先搜索。要搜索的图的顶点编号为0-(V-1),因此例如,具有10个顶点的图将具有编号为0-9的顶点。每个顶点也被赋予一个值。
在我要给出的例子中,每个顶点的数量都等于它的值(例如,顶点0的值为0,顶点1的值为1,等等)。我将每个顶点的值存储在一个数组中,其中位置是顶点,数组中的项目是它的值,所以找到顶点7的值看起来像:
value = matrix[7];
我应该写一个程序,用广度优先搜索找到某个值,并报告找到它的顶点,以及找到它需要多少"步骤"。
我的程序在每个测试用例中都能找到值,但问题是"步骤"不匹配。我认为问题一定在我的BFS算法本身,但我找不到它
例如,我在下面的邻接矩阵中搜索值7,它位于顶点7:
0 1 1 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
有10个节点,编号为0-9,节点0连接到节点1和2,节点1连接到节点3和4,节点2连接到节点5和6,节点3连接到节点7和8,节点4连接到节点9。
如前所述,"顶点"是顶点值的数组。"矩阵"是邻接矩阵。"visited"是一个bool数组,用于跟踪顶点是否已被访问。
我正在使用一个deque容器"遍历"图形,这是我必须使用的。
这是我的BFS:
steps = 1;
int cur_v = 0;
int vertexFound = 0;
bool found = false;
bool *visited = new bool[V];
for (int i = 0; i < V; i++) {
visited[i] = false;
}
deque <int> q;
q.push_back(0);
visited[0] = true;
while (!q.empty()) {
if (found == false) {
steps++;
}
cur_v = q.front();
q.pop_front();
for (int n = 0; n < V; n++) {
if (matrix[cur_v][n] == 1) {
if (visited[n] == false) {
if (vertices[n] == search) {
vertexFound = n;
found = true;
}
visited[n] = true;
q.push_back(n);
}
}
}
}
if (found == true) {
cout << steps << endl;
}
我正在搜索的值是"7",位于顶点7。我应该走7步才能到达那里,但我的程序说需要5步。
我遇到的另一个问题是,当我给程序输入应该使它在具有从值0-7开始的8个顶点的图中搜索值8时,它告诉我它在9个步骤中在顶点0找到了值。
非常感谢您的帮助!
您不应该在第一次找到要查找的内容后更新vertexFound
。(事实上,你可以立即停止搜索。)
相关文章:
- 提升图广度优先搜索前置编译错误
- 使用openmp实现并行广度优先搜索
- 广度优先搜索陷入无限循环
- 并行化广度优先搜索
- 如何使用C 中的广度优先搜索解决8个式嘴问题
- 如何使用广度优先搜索确定是否可以在有向图中到达顶点
- 修改广度优先搜索算法以记住矩阵中的最短路径
- 如何实现广度优先搜索
- 图论:广度优先搜索
- 广度优先搜索未找到正确的路径
- 有向图中的广度优先搜索
- 使用Boost图库从多个来源进行广度优先搜索
- 如何用C++编写广度优先搜索的代码
- C++以广度优先搜索的方式查找多个数组中元素的所有组合
- 广度优先搜索:有向图
- 邻接列表,用于创建图形和广度优先搜索 (BFS) 和 Fepth First Search (DFS)
- 广度优先搜索中的 C++ 迭代器和指针用法
- 广度优先搜索输入
- 广度优先搜索返回错误的金额
- 是否可以将boost库的广度优先搜索算法应用于矩阵