如何在C ++中实现超过2000个节点的最小生成树?

时间:2016-10-10 21:25:13

标签: c++ segmentation-fault minimum-spanning-tree

我想找到一个有超过2000个节点的图形的MST。我得到的问题是我不能使大小超过1500X1500的邻接矩阵(如果大小超过这个分段错误正在发生,因为我们可以创建一个最大10 ^ 7大小的数组)。怎么可以这样做?

1 个答案:

答案 0 :(得分:4)

这里有很多问题要考虑。

  1. 如果正确执行此操作,您应该能够分配大小为1500×1500的数组而不会导致段错误。如果你试图在堆栈上分配这个大小的数组(也就是说,作为局部变量),那么你可能会耗尽你的堆栈空间,这可能是导致你得到错误的原因。但是,如果使用new[]或使用std::vector进行分配,则内存将存储在堆中,该堆旨在满足此类请求。

  2. 邻接矩阵只是表示图形的一种方式,并且它们被称为太空生猪,如果你正在使用极其密集的图形,这只是一个好主意。最常见的替代方案是邻接列表,它使用更少的存储空间,易于实现,并且比邻接矩阵更快地支持许多相关操作。您可能需要考虑将此开关与堆放在堆上而不是堆栈上一起使用。