基于dfs的拓扑排序 这里是用C++中的DFS进行拓扑排序,它有bug(不存在边界错误) #包括 #包括 使用名称空间std; 整数计数=0; 静态整数*a=新整数[8]; 无效dfs(整数u,布尔v[],布尔矩阵[][8]) { v[u]=真; 对于(int i=0;i
我做了一些更改,现在您的程序在上成功完成 最重要的变化是您没有初始化矩阵和v(即使没有此变化,程序仍然成功完成,但输出仅为0-s)。我没有看到您所说的错误。当您没有初始化v时,只得到0-s的原因很明显-所有非零的值以及所有被认为未访问的节点 编辑:我还更改了第27行,您似乎忘记了“=true;”基于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全局,它们将自动归零(我不是说这是一个好方法,只是指出),但由于它们是本地的,所以不
编辑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]<<" ";
}