如何在2D环面中找到4个不相交的生成树

时间:2014-03-28 19:29:32

标签: algorithm minimum-spanning-tree

在我的实现中,我需要在2D圆环中找到4个不相交的生成树。假设所有链接都是双向的。和双向链接不相交。

Ex:我的2D圆环是3 * 3

   | | |
 --0-1-2--
   | | |
 --3-4-5--
   | | |
 --6-7-8--
   | | | 

所以,这里的每个链接实际上代表一个双向链接,例如0和3之间有两条边。一条从0到3,一条从3到0。

在输出中,我应该得到4个不相交的生成树。

虽然我已经考虑过某种算法,但它以某种方式失败了。

算法:

我有以邻接矩阵形式表示的圆环。并且在位置AM [0] [3]和AM [3] [0]的邻接矩阵中,0和3之间的链接由1表示。 节点由(node_number,parent,weight)组成 最初我维护一个priorList,其中所有节点都设置为它们的(node_number,-1,INT_MAX),但生成树的根设置为(node_number,-1,0)

  1. 使用最小权重从priorList中提取节点,以使其父节点不具有子节点。 (在第一次迭代中,它始终是root)。我这样做是通过检查MST中已经提取的节点集。
  2. 如果找到,则更新除已从previousList提取的节点以外的所有邻居。 在这里通过更新我的意思是更新他们的父母,如果已经发现。
  3. 现在将第一步中提取的节点添加到MST中。
  4. 转到第1步,直到priorList不为空。
  5. 它将给出1 MST,但是在从第一个MST的计算中得到的第二个MST从第一个MST的计算中留下作为输出的第二个MST时被卡住(我的意思是,如果我已经在第一个MST中使用了一些边缘,那么我会从矩阵中删除那些边缘。)

    请记住,所有4个生成树应该从相同的给定根开始,并尝试使用Prim算法的变体(http://en.wikipedia.org/wiki/Prim%27s_algorithm)。

    到目前为止,我还不知道任何其他算法,但请查看是否有人可以提供帮助。

0 个答案:

没有答案