我正在完成一个带有邻接矩阵的类实验室,并确定顶点之间的连通性。虽然我的代码运行,但它没有给出正确的结果。
我认为我的while循环中的第二个if语句存在问题。任何帮助是极大的赞赏。代码如下:
#include "graph.h"
#include <assert.h>
using namespace std;
bool Graph::connected(int v,int w) {
int visited[SIZE] ={0};
if (v == w)
return adj_matrix[v][v];
Queue<int> Q;
Q.Enqueue(v);
while (!Q.empty()) {
int curr = Q.Dequeue();
if (curr == w)
return true;
int z=0;
for (int i=0; i<SIZE; i++) {
if (adj_matrix[curr][z]==1 && visited[i]==false) {
Q.Enqueue(z);
visited[i]==true;
}
}
}
return false;
}
这是我收到的输出:
0 0 1 0
0 0 0 0
0 0 0 0
0 0 0 1
vertex 0 is connected to vertices:
vertex 1 is connected to vertices:
vertex 2 is connected to vertices:
vertex 3 is connected to vertices: 3
哪个显然缺少0和2之间的另一个连接正确?
答案 0 :(得分:1)
仔细观察你对变量i和z的使用。看来z被赋值为0,之后从未改变过。您可能想尝试使用更具描述性的变量名称来避免这种混淆。
答案 1 :(得分:1)
另见:
Q.Enqueue(Z); 访问了[I] == TRUE; (它有两个“=”)错了。
将其更改为
Q.Enqueue(Z); 访问了[I] = TRUE;
完全移除z并仅使用i。
另外还有一点:你想要实现'深度优先',那你为什么要使用Queue.Depth首先使用堆栈。请再次检查,你想要实现什么。虽然对于连接,两者都可以使用。