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.