顶点表示haskell

时间:2016-07-18 15:29:16

标签: haskell

我正在使用fgl来表示我的图表:

graph1 :: Gr Int Int 
graph1 = mkGraph (genLNodes 1 7)[(1,2,1),
                (2,3,1),
                (3,4,1),
                (3,5,1),
                (5,6,1),
                (5,7,1)]

然后我做

level 1 graph1

返回

[(1,0),(2,1),(3,2),(4,3),(5,3),(6,4),(7,4)]

现在我想分配给每个顶点X和Y坐标,其中X是元组中的第二个值。例如,对于元组(1,0),X = 0。 Y不相关,现在可能为0。

我不知道如何在Haskell中编写它;我会非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

第1步:编写一个编译的问题:

import Data.Graph.Inductive
import Data.Graph.Inductive.Example

第2步:包含足够的词语以帮助我们了解您在做什么:

-- Construct a graph with node Ids from 1 to 7 and edges with ids
-- all set to '1'.
graph1 :: Gr Int Int.
graph1 = mkGraph (genLNodes 1 7)[(1,2,1),
                (2,3,1),
                (3,4,1),
                (3,5,1),
                (5,6,1),
                (5,7,1)]

main :: IO ()
main =
 do let l1 = level 1 graph1
    -- ^^ This is a breadth-first search of the graph starting at node '1'.
    print l1
    -- Output: [(1,0),(2,1),(3,2),(4,3),(5,3),(6,4),(7,4)]

步骤3:说明所需的最终目标并尝试达到该状态。可悲的是,你没有试图解决这个问题。这里通常不鼓励零努力问题。即使你不能让事情发挥作用,展示你的尝试通常也会更有成效 - 它是学习和教学的焦点。

我对您的目标和解决方案的解释是:

-- Now we want to assign each vertex an x and y value where 'x' is
-- taken as the 2nd element in the above-printed tuple - that is, the
-- 'x' value is the distance from the starting vertex which was '1'.
let xyGraph = map (\(nodeId,xVal) -> (nodeId,xVal,defaultYValue)) l1
    defaultYValue = 0
print xyGraph