使用 DFS 进行拓扑排序
topological sorting using dfs
这是在 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 全局,它们将自动归零(我并不是说这只是指出的好方法),但由于它们是局部的,所以它们不会被归零。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 无法在基于 DFS 的任务排序程序中填充"stack"
- 使用 DFS 进行拓扑排序
- 反向DFS的CLRS拓扑排序算法