Как представить ориентированный циклический граф в Прологе с прямым доступом к соседним вершинам
Мне нужно построить ориентированный граф (во время выполнения) с циклами в Прологе, и я не уверен, как его представить. Мое требование заключается в том, что мне нужно добраться от одной вершины до его соседки за постоянное время.
Можно ли представить его в виде дерева, например:
t(left_son,V,right_son)
но как решить циклы?
Я могу составить список ребер:
graph([a,b,c,d],[e(a,b),e(b,c),e(c,a),e(c,d)])
Или просто
[a->[b],b->[c],c->[a,d],d->[]]
но как избежать вызова функции «член»; в списке при поиске соседей, которые стоят линейного времени?
Спасибо за вашу помощь