Вы можете использовать outdegree
, чтобы получить массив всех вершин с количеством исходящих ребер:
Prelude Data.Graph Data.Array> outdegree graph
array (0,3) [(0,1),(1,1),(2,0),(3,1)]
Значением каждого элемента в массиве является количество исходящих ребер.Если вы хотите отфильтровать массив, вы можете превратить его в список ассоциаций:
Prelude Data.Graph Data.Array> assocs $ outdegree graph
[(0,1),(1,1),(2,0),(3,1)]
, а затем отфильтровать его.Так как вас интересуют вершины, у которых нет исходящих ребер, вы можете отфильтровать те, где значение (второй элемент) в списке ассоциаций равно 0
:
Prelude Data.Graph Data.Array> filter ((0 ==) . snd) $ assocs $ outdegree graph
[(2,0)]
Если вы хотите списокузлов, вы можете отобразить этот отфильтрованный список ассоциаций, используя nodeFromVertex
:
Prelude Data.Graph Data.Array> l = filter ((0 ==) . snd) $ assocs $ outdegree graph
Prelude Data.Graph Data.Array> fmap (nodeFromVertex . fst) l
[("c",'c',"")]