图形组件之间的路径算法

Algorithm for pathing between graph components

本文关键字:路径 算法 之间 组件 图形      更新时间:2023-10-16

首先,这是一道家庭作业题。我有一个布尔矩阵,其中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

根据我给出的定义,这个矩阵包含3组。一个位于左上角,由5个节点组成,一个位于右上角,包括1个节点,另一个位于由2个节点组成的节点下方
我需要做的是编写一个函数,该函数确定必须添加到矩阵中的最少节点数,以便连接所有单独的组件。当可以从一个组中的任何节点到另一个组建立路径时,两个组是连接的。

所以,我要求的是有人在算法方面把我推向正确的方向。我已经考虑过如何使用路径查找算法来查找两组之间的最短路径,但不确定如何为矩阵中的每一组都这样做。如果我使用深度优先遍历来确定单独的组,那么我可以为每个组中的任意节点到另一个组使用路径查找算法吗?

一般问题称为Steiner树问题,它是NP完全问题。

有一种算法不是指数型的,但它会给你一个次优的解决方案。

你可以这样做的方法是计算任何两对组件之间的最短路径,只使用初始组件和你计算的权重来做最小生成树,然后遍历你的解决方案并消除循环。

由于您有很多连接岛屿的选项,我将添加一个步骤来优化连接。

但一个最佳答案的算法:NP完全(尝试每种组合)。

将每个连接的组件(组)视为一个节点。然后您可以运行MST(最小生成树)算法来找到连接所有组的最小成本。

复杂性:构建边的复杂性=O(M*M)+O(ElgV