基于dfs的拓扑排序 这里是用C++中的DFS进行拓扑排序,它有bug(不存在边界错误) #包括 #包括 使用名称空间std; 整数计数=0; 静态整数*a=新整数[8]; 无效dfs(整数u,布尔v[],布尔矩阵[][8]) { v[u]=真; 对于(int i=0;i

基于dfs的拓扑排序 这里是用C++中的DFS进行拓扑排序,它有bug(不存在边界错误) #包括 #包括 使用名称空间std; 整数计数=0; 静态整数*a=新整数[8]; 无效dfs(整数u,布尔v[],布尔矩阵[][8]) { v[u]=真; 对于(int i=0;i,c++,graph-theory,depth-first-search,C++,Graph Theory,Depth First Search,我做了一些更改,现在您的程序在上成功完成 最重要的变化是您没有初始化矩阵和v(即使没有此变化,程序仍然成功完成,但输出仅为0-s)。我没有看到您所说的错误。当您没有初始化v时,只得到0-s的原因很明显-所有非零的值以及所有被认为未访问的节点 编辑:我还更改了第27行,您似乎忘记了“=true;” 编辑2:你没有为不好的a释放内存。我也不明白你为什么需要a的动态数组。你知道它的大小。最后一句话-如果你使数组矩阵和v全局,它们将自动归零(我不是说这是一个好方法,只是指出),但由于它们是本地的,所以不

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

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


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

这里有一个超出范围访问的候选项
a[count++]=u;
。您如何知道在递归调用期间,
计数始终在范围内?您遇到了什么错误?是否与
v
矩阵中的许多元素未初始化有关?@boperson-调用
dfs
的条件是
v[i]
false
。在
v
中只有8个元素,而当前元素在
dfs
中被立即设置为
false
,因此我认为不会因为递归而过度索引。你会得到什么错误?你会得到分段错误吗?c数组没有越界错误。。。
#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]<<"  ";
}