使用 DFS 进行拓扑排序

topological sorting using dfs

本文关键字:排序 DFS 使用      更新时间:2023-10-16

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

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

编辑:我还更改了您似乎忘记了" = true;"的第27行

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