-
Notifications
You must be signed in to change notification settings - Fork 1
/
dfs.pl
66 lines (51 loc) · 1.17 KB
/
dfs.pl
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
:- use_module(library(readln)).
:- use_module(library(clpfd)).
:- dynamic
visitado/1.
vuelo(new_york, chicago, 1000).
vuelo(chicago, denver, 1000).
vuelo(new_york, toronto, 800).
vuelo(new_york, denver, 1900).
vuelo(toronto, calgary, 1500).
vuelo(toronto, los_angeles, 1800).
vuelo(toronto, chicago, 500).
vuelo(denver, urbana, 1000).
vuelo(denver, houston, 1500).
vuelo(denver, los_angeles, 1000).
vuelo(houston, los_angeles,1500).
encontrar_ruta:- /* not the minimum distance */
write('from: '),
readln(A),
write('to: '), readln(B),
ruta(A,B,D),
write(D), nl,
displayruta.
/* find route */
ruta(A,B,C):-
es_vuelo(A,B,C).
/* ver si hay conexion entre dos ciudades */
es_vuelo(T,T2,D):-
vuelo(T,T2,D),
anadir_a_ruta(T).
es_vuelo(T,T2,D):-
vuelo(T,X,D2),
dif(X,T2),
anadir_a_ruta(T),
es_vuelo(X,T2,D3),
D=D2+D3.
es_vuelo(T,_,D):-
/* Informar de un punto sin salida para mostrar como progresa la busqueda */
write(T),
nl, D=0, fail.
/* Add to list of visited cities */
anadir_a_ruta(T):-
not(visitado(T)),
assert(visitado(T)),!.
anadir_a_ruta(_).
purgar:-
retractall(visitado(_)).
displayruta:-
write('The route is: '), nl,
visitado(A),
write(A), nl,
fail,!.