next up previous
Next: Caminho Up: Enunciados Previous: C

C

onsidere um grafo dirigido representado por factos . Por exemplo:
seta(a,b).
seta(b,c).
seta(c,c).
seta(a,d).
seta(d,a).
   
Pretende-se que implemente um predicado ciclos/1, que retorne uma lista (possivelmente vazia) com todos os ciclos (mínimos) no grafo. Um ciclo é representado por uma lista que contém todos os nós no ciclo na ordem em que as setas os ligam e começa e acaba com o mesmo nó. Um ciclo mínimo não contém qualquer outro ciclo nele mesmo. Cada ciclo mínimo do grafo deve ser dado exactamente uma vez. Para o exemplo acima, temos

         ?- ciclos(C).
            C = [[c,c],[a,d,a]]
ou

         ?- ciclos(C).
            C = [[c,c],[d,a,d]]
ou

         ?- ciclos(C).
            C = [[a,d,a],[c,c]]
ou

         ?- ciclos(C).
            C = [[d,a,d],[c,c]]
O seu programa deve dar uma das listas C acima: a ordem dos ciclos na lista é irrelevante assim como o nó de começo de um ciclo.


1999-04-01