2

我正在完成一个课堂实验室,它采用邻接矩阵,并确定顶点之间的连通性。虽然我的代码运行,但它没有给出正确的结果。

我相信我的 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 之间的另一个连接是正确的?

4

2 回答 2

1

仔细看看你对变量 i 和 z 的使用。似乎 z 被赋值为 0,之后就再也没有改变过。您可能想尝试使用更具描述性的变量名称来避免这种混淆。

于 2012-05-17T03:30:53.273 回答
1

另请参阅:

Q.入队(z);访问[i]==真;(它有两个“=”)是错误的。

将其更改为

Q.入队(z);访问[i]=真;

并完全移除 z 并仅使用 i。

嘿还有一点:你想实现“深度优先”,那你为什么使用队列。深度优先使用堆栈。请再次检查你想要实现的内容。虽然对于连接性,两者都可以使用。

于 2012-05-17T05:55:14.677 回答