从边列表构建图形

时间:2013-04-15 05:55:01

标签: haskell data-structures graph edges

给出如下图形数据类型:

data Graph = Int :~> [Graph]
infixr :~>

以及像这样的边缘列表:

edges = [(10,1), (10,5), (1,2), (2,3), (5,6), (5,9), (9,8)]

如下构建图形的功能是什么:

result = 10 :~> [ 1 :~> [ 2 :~> 3 :~> [] ] 
                , 5 :~> [ 6 :~> [], 9 :~> 8 :~> [] ]
                ]

我确信它在我面前是正确的,但我有点疲惫,并会很感激帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

  1. 查找起始节点:节点显示在map fst edges列表中,但不在map snd edges列表中。正如luqui所说,你需要考虑一些你没有找到这样一个节点的情况(或者你找到不止一个节点)
  2. 从此起始节点递归构建树。要小心,因为图中仍有循环

答案 1 :(得分:0)

不是您想要的,但Data.Graph库的containers模块可以提供帮助。

import Data.Graph
bounds = (1,10) 
edges = [(10,1), (10,5), (1,2), (2,3), (5,6), (5,9), (9,8)]

> buildG bounds edges
array (1,10) [(1,[2]),(2,[3]),(3,[]),(4,[]),(5,[9,6]),(6,[]),(7,[]),(8,[]),(9,[8]),(10,[5,1])]