- gallery(bielany, bemowo, 4).
- gallery(bielany, zoliborz, 3).
- gallery(bemowo, wola, 2).
- gallery(bemowo, zoliborz, 3).
- gallery(zoliborz, pragan, 5).
- gallery(zoliborz, srodmiescie, 1).
- gallery(wola, srodmiescie, 1).
- gallery(wola, ochota, 2).
- gallery(wola, wlochy, 4).
- gallery(srodmiescie, pragan, 5).
- gallery(srodmiescie, pragas, 5).
- gallery(srodmiescie, ochota, 4).
- gallery(srodmiescie, mokotow, 2).
- gallery(wlochy, ursus, 1).
- gallery(wlochy, ursynow, 3).
- gallery(ochota, mokotow, 2).
- gallery(ochota, ursynow, 3).
- gallery(ursynow, wilanow, 3).
- gallery(wilanow, mokotow, 4).
- gallery(wilanow, wawer, 5).
- gallery(mokotow, wawer, 5).
- gallery(pragan, targowek, 2).
- gallery(pragan, pragas, 2).
- gallery(pragas, targowek, 3).
- gallery(pragas, wawer, 4).
- gallery(bemowo, ursus, 2).
- % Graf nieskierowany
- neighborroom(X, Y, W) :- gallery(X, Y, W).
- neighborroom(X, Y, W) :- gallery(Y, X, W).
- % Lista węzłów zakazanych
- avoid([pragas, pragan, targowek]).
- route(End, End, _, 0, VisitedRooms, 0) :-
- member(End, VisitedRooms),
- reverse(VisitedRooms, Path),
- write(Path), nl.
- route(Start, End, StartWeight, TotalWeight, VisitedRooms, FinalWeight) :-
- neighborroom(Start, Next, Weight),
- avoid(DangerousRooms),
- \+ member(Next, DangerousRooms),
- \+ member(Next, VisitedRooms),
- NewWeight is StartWeight + Weight,
- route(Next, End, NewWeight, TotalWeight, [Next|VisitedRooms], FinalWeight1),
- FinalWeight is Weight + FinalWeight1.