使用邻接矩阵进行深度优先搜索

时间:2012-05-17 03:18:12

标签: c++ adjacency-matrix

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

另见:

Q.Enqueue(Z); 访问了[I] == TRUE; (它有两个“=”)错了。

将其更改为

Q.Enqueue(Z); 访问了[I] = TRUE;

完全移除z并仅使用i。

另外还有一点:你想要实现'深度优先',那你为什么要使用Queue.Depth首先使用堆栈。请再次检查,你想要实现什么。虽然对于连接,两者都可以使用。