我正在使用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中编写它;我会非常感谢你的帮助。
答案 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