2

グラフのデータ型を次のように指定します。

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 :~> [] ]
                ]

頭のすぐ前にあると思いますが、少し疲れているので、助けていただければ幸いです。ありがとう!

4

2 に答える 2

2
  1. 開始ノードを見つける: ノードはリストに表示されますが、map fst edgesリストには表示されませんmap snd edges。luqui が指摘したように、そのようなノードが見つからない場合 (または複数見つかった場合) について考える必要があります。
  2. この開始ノードからツリーを再帰的に構築します。グラフにはまだサイクルが含まれている可能性があるので注意してください
于 2013-04-15T07:39:38.613 に答える
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])]
于 2018-03-09T17:46:20.177 に答える