0

这是在 C++ 中使用 DFS 的拓扑排序,它有错误(超出范围的错误)

#include<iostream>
#include<stdio.h>
using namespace std;
int count=0;
 static int *a=new int[8];

void dfs(int u,bool v[],bool matrix[][8])
{
    v[u]=true;
    for(int  i=0;i<8;i++)
        if(!v[i]&& matrix[u][i])
            dfs(i,v,matrix);

    a[count++]=u;
}

int main()
{
    bool v[8];
    bool matrix[8][8];
    matrix[7][6]=true;
    matrix[0][1];
    matrix[1][2]=true;
    matrix[2][3]=true;
    matrix[3][4]=true;
    matrix[2][5]=true;
    for(int i=0;i<8;i++)
        if(!v[i])
            dfs(i,v,matrix);
    for(int i=0;i<8;i++)
    cout<<a[7-i]<<"  ";
}

请帮我解决这个错误,我想我应该创建矩阵[8][2],但是之后如何继续?

4

1 回答 1

2

我做了一些更改,现在您的程序在ideone上成功完成 最重要的更改是您没有初始化矩阵和 v(即使没有此更改,程序仍然成功完成,但输出仅为 0-s)。我没有看到你所说的错误。当您没有初始化 v 时仅获得 0-s 的原因很明显 - 所有非零值以及所有被认为未访问的节点。

编辑:我还更改了第 27 行,您似乎忘记了“= true;”

编辑 2:你没有为不好的释放内存。另外我不明白为什么你需要动态数组。你事先知道它的大小。最后一点 - 如果您将数组矩阵和 v 设为全局,它们将自动归零(我并不是说这是一个好的方法,只是指出),但由于它们是本地的,它们不会归零。

于 2012-04-28T11:11:28.743 回答