【发布时间】:2013-11-24 16:54:53
【问题描述】:
首先,这是一道作业题。我有一个布尔矩阵,其中 1 代表节点,相邻节点被认为是连接的。 例如:
1 0 0 0 1
1 1 1 0 0
1 0 0 1 1
0 0 0 0 0
0 0 0 0 0
根据我给出的定义,这个矩阵包含 3 个组。左上角1个,5个节点,右上1个1个节点,右下1个2个节点。
我需要做的是编写一个函数来确定必须添加到矩阵中的最少节点数,以便连接所有单独的组件。当可以建立从一组中的任何节点到另一组的路径时,两组连接。
所以,我要找的人在算法方面将我推向正确的方向。我已经考虑过如何使用路径查找算法来查找两组之间的最短路径,但不确定如何为矩阵中的每个组执行此操作。如果我使用深度优先遍历来确定单独的组,那么我是否可以对每个组中的任意节点到另一个节点使用路径查找算法?
【问题讨论】:
-
似乎是一个棘手的问题!一种方法可以是首先识别这些岛,计算这些岛之间的成对最短距离,并获得 0 到 1 转换次数的上限。然后递归地尝试减少这个数字,看看它是否可能。正如我所说,这种方法效率非常低,我认为应该有更好的方法。
-
不相交集也有利于查找单独的组。广度优先搜索擅长确定最短路径,因为您“向外辐射”很慢。我同意@AbhishekBansal 这是一个棘手的问题