Toggle navigation
?
users online
Logout
Open hangout
Open chat for current file
% p_viaje.pl % Problema del viaje en Andalucía % José A. Alonso Jiménez <https://jaalonso.github.io> % Sevilla, 25-mayo-2022 % ============================================================================= % Descripción de problema % ======================= % + Nos encontramos en una capital andaluza (p.e. Sevilla) % + Desamos ir a otra capital andaluza (p.e. Almería) % + La línea de autobuses sólo tiene viajes de cada capital a sus % vecinas. % Un esquema del mapa de Andalucía es: % HU --- SE --- CO --- JA % \ | \ | \ | % \ | \ | \ | % CA --- MA --- GR --- AL % Representación del problema % =========================== % Un ESTADO es un elemento de la lista [almeria, cadiz, cordoba, % granada, huelva, jaen, malaga, sevilla]. % estado_inicial(?E) se verifica si E es el estado inicial. estado_inicial(sevilla). % estado_final(?E) se verifica si E es un estado final. estado_final(almería). % sucesor(+E1,?E2) se verifica si E2 es un sucesor del estado E1. sucesor(E1,E2) :- ( conectado(E1,E2) ; conectado(E2,E1) ). % conectado(?E1,?E2) se verifica si E1 y E2 están conectados. conectado(huelva,sevilla). conectado(huelva,cádiz). conectado(sevilla,córdoba). conectado(sevilla,málaga). conectado(sevilla,cádiz). conectado(córdoba,jaén). conectado(córdoba,granada). conectado(córdoba,málaga). conectado(cádiz,málaga). conectado(málaga,granada). conectado(jaén,granada). conectado(granada,almería). % coste(+E1,+E2,?C) se verifica si C es la distancia entre E1 y E2. coste(E1,E2,C) :- coordenadas(E1,P1), coordenadas(E2,P2), distancia(P1,P2,C). % coordenadas(E,C) se verifica si C son las coordenadas de E según la % siguiente tabla: % +---------+-------+-------+ % | almería | 409.5 | 93 | % | cádiz | 63 | 57 | % | córdoba | 198 | 207 | % | granada | 309 | 127.5 | % | huelva | 3 | 139.5 | % | jaén | 295.5 | 192 | % | málaga | 232.5 | 75 | % | sevilla | 90 | 153 | % +---------+-------+-------+ coordenadas(almería, [409.5, 93 ]). coordenadas(cádiz, [ 63 , 57 ]). coordenadas(córdoba, [198 , 207 ]). coordenadas(granada, [309 , 127.5]). coordenadas(huelva, [ 3 , 139.5]). coordenadas(jaén, [295.5, 192 ]). coordenadas(málaga, [232.5, 75 ]). coordenadas(sevilla, [ 90 , 153 ]). % distancia([X1,Y1],[X2,Y2],D) se verifica si D es la distancia entre % los puntos [X1,Y1] y [X2,Y2]. distancia([X1,Y1],[X2,Y2],D) :- D is sqrt((X1-X2)**2+(Y1-Y2)**2).