这里是使用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],但之后如何继续?
答案 0 :(得分:2)
我做了一些更改,现在您的程序在ideone成功完成 最重要的变化是你没有初始化矩阵和v(即使没有这个改变,程序仍然成功完成但输出只有0-s)。我没有看到你说的错误。当你没有初始化v时,只获得0-s的原因是显而易见的 - 所有的值都是非零的,所以所有的节点都被认为没有被访问过。
编辑:我也改变了第27行,你似乎已经忘记了“= true;”编辑2:你没有释放内存以获得不好的内存。另外我不明白你为什么需要动态数组。你知道它的大小。最后一句话 - 如果你制作数组矩阵和v全局它们将自动归零(我不是说这是指出的好方法),但因为它们是本地的,所以它们不会归零。