MinimalSteinerTree 的意思是:
在图中找出一个生成树,需要将指定的数个点连接,边权总值最小。
最小生成树是 MinimalSteinerTree
的一种特殊情况。
此问题是NP完全问题。
在POJ 3123中的标程给出了一个递归的算法来解决这个问题。
首先用floyd算法求出两两之间的最短路径。
然后把所有点都两两链接起来,权值就是它们的最短路径。
假设指定必须连接的点有N个。
那么MinimalSteinerTree
树中的内点最多有N-2个。
在纸上画一下就知道了,内点最多的情况就是树为满二叉树的情况。
而由于之前的floyd算法。把整个图给“缩”了一下。
所以树最多有N-2+N个点。
枚举所有可能的点集。对每个点集求最小生成树。取最小值即可。
另外一种方法是使用动态规划,详情请见
这里。