Olá amigos do fórum.
Tenho um trabalho de escola de Prolog. Há um grafo, conforme imagem postada, diante disso devemos fazer:
a-) Mostrar caminhos
Ou seja: a <-> b = 2 e assim por diante
b-) Mostrar menor caminho
Ou seja: a <-> d = menor caminho de A até D, que seria no caso (a<->b<->c) = 3
Para o item A eu consegui fazer usando o codigo abaixo:
caminho(a,b,2).
caminho(a,c,3).
caminho(c,b,4).
caminho(c,d,5).
caminho(b,d,1).
caminho(b,a,2).
caminho(c,a,3).
caminho(b,c,4).
caminho(d,c,5).
caminho(d,b,1).
caminhoCusto(B, A, Cam, Custo) :-travessiaCusto(A, B, [A], Cam, Custo).
travessiaCusto(A, B, Visitados,[B|Visitados], Custo1) :- caminho(A, B, Custo1).
travessiaCusto(A, B, Visitados, Cam, Custo) :- caminho(A, C, Custo2),C == B,+ member(C, Visitados),travessiaCusto(C, B, [C|Visitados], Cam, CustoResto),Custo is Custo2 + CustoResto.
Mas para o item B não consigo de maneira alguma pensar um uma solução que resolva meu problema.
Gostaria que algum amigo que pudesse me ajudar, seria de grande ajuda pra mim.
Agradeço desde já toda ajuda.
PS: já li varias e varias apostilas, por isso eu agradeceria se nao mandassem links de apostilas, salvo se for algo muito especifico em relação a custo minimo, fora isso já li de montão no google (Y) Com todo respeito. (Y)