广度优先搜索未找到正确的路径

时间:2015-04-26 15:06:46

标签: c++ arrays matrix depth-first-search breadth-first-search

所以我有一个实验室,使用邻接矩阵实现广度优先搜索和深度优先搜索。要搜索的图的顶点编号为0-(V-1),因此例如具有10个顶点的图将具有编号为0-9的顶点。每个顶点也都有一个值。

在我要给出的例子中,每个顶点的数量等于它的值(例如,顶点0的值为0,顶点1的值为1,等等)。我将每个顶点的值存储在一个数组中,其中position是顶点,而数组中的item是它的值,所以找到vertex 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。

如上所述"顶点"是顶点值的数组。 "基质"是邻接矩阵。 "访问"是一个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;
}

我正在搜索的值是&#34; 7&#34;,位于顶点7.我应该花7步才能到达那里,但我的程序说它需要5个。

我遇到的另一个问题是,当我给出程序输入时,它应该使它在一个图形中搜索值8,其中8个顶点从值0-7开始,它告诉我它在顶点找到了值0步9步。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

在您第一次找到您要查找的内容后,您不应该更新vertexFound。 (事实上​​,你可以立即停止搜索。)