Next: Caminho
Up: Enunciados
Previous: 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