C++ 宽度优先搜索未找到正确路径

C++ 宽度优先搜索未找到正确路径,c++,arrays,matrix,depth-first-search,breadth-first-search,C++,Arrays,Matrix,Depth First Search,Breadth First Search,所以我有一个实验室用邻接矩阵实现广度优先搜索和深度优先搜索。要搜索的图的顶点编号为0-(V-1),因此,例如,具有10个顶点的图的顶点编号为0-9。每个顶点也被赋予一个值 在我将要给出的示例中,每个顶点的数目等于其值(例如,顶点0的值为0,顶点1的值为1,等等)。我将每个顶点的值存储在一个数组中,其中位置是顶点,数组中的项是它的值,因此查找顶点7的值如下所示: value = matrix[7]; 我应该写一个程序,通过广度优先搜索找到一个特定的值,并报告找到它的顶点,以及找到它需要多少“步骤

所以我有一个实验室用邻接矩阵实现广度优先搜索和深度优先搜索。要搜索的图的顶点编号为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

如前所述,“顶点”是顶点值的数组。“矩阵”是邻接矩阵。“已访问”是一个布尔数组,用于跟踪顶点是否已访问

我正在使用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;
}
steps=1;
int cur_v=0;
int vertexFound=0;
bool-found=false;
bool*visted=新bool[V];
对于(int i=0;icout你不应该在第一次找到你要找的东西后更新
VertexFind

if(found==false)
if(!found)
更好;同样地,
if(found==true)
是一种冗长的说法
。谢谢,我解决了这个问题!不幸的是,计数问题没有变化。你在
步骤中计数错误的东西
-你每次从队列中取下东西时都会增加它,而不是当你与源的距离增加时。(如果源有两个邻居,这两个邻居都相距一步。)你需要做更多的工作来解决这个问题-例如,记住到每个节点的最短距离。谢谢!这是很大的帮助,我能够解决它。