-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrajetoria
42 lines (36 loc) · 1.13 KB
/
trajetoria
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
ligado(a,b).
ligado(f,i).
ligado(a,c).
ligado(f,j).
ligado(b,d).
ligado(f,k).
ligado(b,e).
ligado(g,l).
ligado(b,f).
ligado(g,m).
ligado(c,g).
ligado(k,n).
ligado(d,h).
ligado(l,o).
ligado(d,i).
ligado(i,f).
membro(X, [X|_]):- !.
membro(X, [_|Y]):- membro(X,Y).
concatena([], L, L).
concatena([X|Y], L, [X|Lista]):- concatena(Y, L, Lista).
inverte([X], [X]).
inverte([X|Y], Lista):- inverte(Y, Lista1), concatena(Lista1, [X], Lista).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ache_todos(X, Y, Z):- bagof(X, Y, Z), !.
ache_todos(_, _, []).
estende_ate_filho([N|Trajectoria], [N1,N|Trajectoria]):-
ligado(N, N1),
membro(N1, Trajectoria).
resolva_larg(No_inicial, No_meta, Solucao):-
largura([[No_inicial]], No_meta, Sol1),
inverte(Sol1, Solucao).
largura([[No_meta|T]|_],No_meta,[No_meta|T]).
largura([T|Fila],No_meta,Solucao):-
ache_todos(ExtensaoAteFilho,estende_ate_filho(T,ExtensaoAteFilho),Extensoes),
concatena(Fila, Extensoes, FilaExtendida),
largura(FilaExtendida, No_meta, Solucao).