使用dfs进行拓扑排序

时间:2012-04-28 10:55:18

标签: c++ graph-theory depth-first-search

这里是使用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],但之后如何继续?

1 个答案:

答案 0 :(得分:2)

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

编辑:我也改变了第27行,你似乎已经忘记了“= true;”

编辑2:你没有释放内存以获得不好的内存。另外我不明白你为什么需要动态数组。你知道它的大小。最后一句话 - 如果你制作数组矩阵和v全局它们将自动归零(我不是说这是指出的好方法),但因为它们是本地的,所以它们不会归零。