Cómo representar el gráfico cíclico dirigido en Prolog con acceso directo a las verticías vecinas

Necesito construir una gráfica dirigida (en tiempo de ejecución) con ciclos en Prolog y no estoy seguro de cómo representarlo. Mi requisito es que necesito pasar de un vértice a su vecino en un tiempo constante.

¿Es posible representarlo como un árbol, por ejemplo:

t(left_son,V,right_son)

¿Pero cómo resolver los ciclos?

Puedo hacer una lista de bordes:

graph([a,b,c,d],[e(a,b),e(b,c),e(c,a),e(c,d)])

O solo

[a->[b],b->[c],c->[a,d],d->[]]

pero, ¿cómo evitar llamar a la función 'miembro' en la lista al buscar vecinos, que cuestan tiempo lineal?

Gracias por tu ayuda

Respuestas a la pregunta(3)

Su respuesta a la pregunta