como visitar cada ponto no grafo direcionado

No Prolog, como posso implementar o algoritmo gráfico para encontrar todo o caminho para implementar o problema do vendedor de viagens no grafo direcionado?

exemplo:

                                                                         graph
                    expected input     expected output                 X -----> Y
    start X             X  Y               X Z                         Y -----> T
    end   Z             Y  T               X Y Z                       T -----> Z
                        T  Z               X Y T Z                     Y -----> Z
                        Y  Z                                           X -----> Z
                        X  Z

Como você sabe, no gráfico direcionado, pode haver um ciclo. No entanto, não há necessidade de passar o mesmo ponto duas vezes.

             graph             expected output             
           X ----> Y            
           Y ----> X               X Y Z
           Y ----> Z 

Por que eu estou eliminando este caso é porque;

      output :

      X Y X Y ...   Z
              ^^^
              god knows this length ( when program terminates )
              termination is np problem

questionAnswers(2)

yourAnswerToTheQuestion