2013-04-11 3 views
1

Я прочитал несколько руководств по этой теме, но я до сих пор не понимаю.Поиск кратчайшего пути с помощью Prolog

Код:

%flight(ORIGIN,DEST,DEPARTTIME,ARRIVALTIME,FLIGHTNO, DAY). Day 1=mon 7=sun 
flight(singapore,london , 2310, 0520, ba58,1). 
flight(singapore,london , 2310, 0520, ba58,3). 
flight(singapore,london , 2310, 0520, ba58,4). 
flight(singapore,london , 2310, 0520, ba58,6). 
flight(london,singapore , 1000, 1610, ba24,1). 
flight(london,singapore , 1000, 1610, ba24,3). 
flight(london,singapore , 1000, 1610, ba24,4). 
flight(london,singapore , 1000, 1610, ba24,6). 
flight(london,edinburgh , 0940, 1050, ba4732,1). 
flight(london,edinburgh , 0940, 1050, ba4732,2). 
flight(london,edinburgh , 0940, 1050, ba4732,3). 
flight(london,edinburgh , 0940, 1050, ba4732,4). 
flight(london,edinburgh , 0940, 1050, ba4732,5). 
flight(london,edinburgh , 0940, 1050, ba4732,6). 
flight(london,edinburgh , 0940, 1050, ba4732,7). 

Как найти самый быстрый рейс из Сингапура говорят в Эдинбург?

Самый короткий расчет полета должен включать общую продолжительность полета и общее время ожидания между рейсами.

+0

Я хотел попробовать .. но даже не знаю с чего начать ... – user2260526

+0

какую книгу вы используете? каков ваш последний рабочий код? (вы можете поместить его на pastebin.org или что-то в этом роде). Я спрашиваю, узнать, что вы знаете о Prolog в это время. –

+0

коды: http://pastebin.com/ca02QDfK учебник используется: http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_15A.pl Я мог выполнять только самые простые ... прямые рейсы .... – user2260526

ответ

2
%flight(ORIGIN,DEST,DEPARTTIME,ARRIVALTIME,FLIGHTNO, DAY). 
flight(singapore,london , 2310, 0520, ba58,1). 
flight(singapore,london , 2310, 0520, ba58,3). 
flight(singapore,london , 2310, 0520, ba58,4). 
flight(singapore,london , 2310, 0520, ba58,6). 
flight(london,singapore , 1000, 1610, ba24,1). 
flight(london,singapore , 1000, 1610, ba24,3). 
flight(london,singapore , 1000, 1610, ba24,4). 
flight(london,singapore , 1000, 1610, ba24,6). 
flight(london,edinburgh , 0940, 1050, ba4732,1). 
flight(london,edinburgh , 0940, 1050, ba4732,2). 
flight(london,edinburgh , 0940, 1050, ba4732,3). 
flight(london,edinburgh , 0940, 1050, ba4732,4). 
flight(london,edinburgh , 0940, 1050, ba4732,5). 
flight(london,edinburgh , 0940, 1050, ba4732,6). 
flight(london,edinburgh , 0940, 1050, ba4732,7). 
flight(london,edinburgh , 1140, 1250, ba4735,1). 
flight(london,edinburgh , 1140, 1250, ba4735,2). 
flight(london,edinburgh , 1140, 1250, ba4735,3). 
flight(london,edinburgh , 1140, 1250, ba4735,4). 
flight(london,edinburgh , 1140, 1250, ba4735,5). 
flight(london,edinburgh , 1140, 1250, ba4735,6). 
flight(london,edinburgh , 1140, 1250, ba4735,7). 
flight(london,edinburgh , 1840, 1950, ba4822,1). 
flight(london,edinburgh , 1840, 1950, ba4822,2). 
flight(london,edinburgh , 1840, 1950, ba4822,3). 
flight(london,edinburgh , 1840, 1950, ba4822,4). 
flight(london,edinburgh , 1840, 1950, ba4822,5). 
flight(edinburgh,london , 0830, 0940, ba4733 ,1). 
flight(edinburgh,london , 0830, 0940, ba4733,2). 
flight(edinburgh,london , 0830, 0940, ba4733,3). 
flight(edinburgh,london , 0830, 0940, ba4733,4). 
flight(edinburgh,london , 0830, 0940, ba4733,5). 
flight(edinburgh,london , 0830, 0940, ba4733,6). 
flight(edinburgh,london , 0830, 0940, ba4733,7). 
flight(edinburgh,london , 1340, 1450, ba4736,1). 
flight(edinburgh,london , 1340, 1450, ba4736,2). 
flight(edinburgh,london , 1340, 1450, ba4736,3). 
flight(edinburgh,london , 1340, 1450, ba4736,4). 
flight(edinburgh,london , 1340, 1450, ba4736,5). 
flight(edinburgh,london , 1340, 1450, ba4736,6). 
flight(edinburgh,london , 1340, 1450, ba4736,7). 
flight(edinburgh,london , 1940, 2050, ba4833,1). 
flight(edinburgh,london , 1940, 2050, ba4833,2). 
flight(edinburgh,london , 1940, 2050, ba4833,3). 
flight(edinburgh,london , 1940, 2050, ba4833,4). 
flight(edinburgh,london , 1940, 2050, ba4833,5). 
flight(edinburgh,london , 1940, 2050, ba4833,6). 
flight(london,greece , 0910, 1245, ba614,1). 
flight(london,greece , 0910, 1245, ba614,2). 
flight(london,greece , 0910, 1245, ba614,3). 
flight(london,greece , 0910, 1245, ba614,4). 
flight(london,greece , 0910, 1245, ba614,5). 
flight(london,greece , 0910, 1245, ba614,6). 
flight(london,greece , 0910, 1245, ba614,7). 
flight(london,greece , 1445, 1820, sr805,1). 
flight(london,greece , 1445, 1820, sr805,2). 
flight(london,greece , 1445, 1820, sr805,3). 
flight(london,greece , 1445, 1820, sr805,4). 
flight(london,greece , 1445, 1820, sr805,5). 
flight(london,greece , 1445, 1820, sr805,6). 
flight(london,greece , 1445, 1820, sr805,7). 
flight(greece,london , 0900, 1140, ba613,1). 
flight(greece,london , 0900, 1140, ba613,2). 
flight(greece,london , 0900, 1140, ba613,3). 
flight(greece,london , 0900, 1140, ba613,4). 
flight(greece,london , 0900, 1140, ba613,5). 
flight(greece,london , 0900, 1140, ba613,6). 
flight(greece,london , 1610, 1855, sr806,1). 
flight(greece,london , 1610, 1855, sr806,2). 
flight(greece,london , 1610, 1855, sr806,3). 
flight(greece,london , 1610, 1855, sr806,4). 
flight(greece,london , 1610, 1855, sr806,5). 
flight(greece,london , 1610, 1855, sr806,7). 
flight(london,paris , 0830, 1030, ba510,1). 
flight(london,paris , 0830, 1030, ba510,2). 
flight(london,paris , 0830, 1030, ba510,3). 
flight(london,paris , 0830, 1030, ba510,4). 
flight(london,paris , 0830, 1030, ba510,5). 
flight(london,paris , 0830, 1030, ba510,6). 
flight(london,paris , 0830, 1030, ba510,7). 
flight(london,paris , 1310, 1510, az459,1). 
flight(london,paris , 1310, 1510, az459,2). 
flight(london,paris , 1310, 1510, az459,3). 
flight(london,paris , 1310, 1510, az459,4). 
flight(london,paris , 1310, 1510, az459,5). 
flight(london,paris , 1310, 1510, az459,6). 
flight(london,paris , 1310, 1510, az459,7). 
flight(paris,london , 0910, 1020, ba511,1). 
flight(paris,london , 0910, 1020, ba511,2). 
flight(paris,london , 0910, 1020, ba511,3). 
flight(paris,london , 0910, 1020, ba511,4). 
flight(paris,london , 0910, 1020, ba511,5). 
flight(paris,london , 0910, 1020, ba511,6). 
flight(paris,london , 0910, 1020, ba511,7). 
flight(paris,london , 1220, 1330, az460,1). 
flight(paris,london , 1220, 1330, az460,2). 
flight(paris,london , 1220, 1330, az460,3). 
flight(paris,london , 1220, 1330, az460,4). 
flight(paris,london , 1220, 1330, az460,5). 
flight(paris,london , 1220, 1330, az460,6). 
flight(paris,london , 1220, 1330, az460,7). 
flight(paris,rome , 1130, 1240, jp322,2). 
flight(paris,rome , 1130, 1240, jp322,3). 
flight(paris,rome , 1130, 1240, jp322,4). 
flight(rome,paris , 1330, 1440, jp323,2). 
flight(rome,paris , 1330, 1440, jp323,3). 
flight(rome,paris , 1330, 1440, jp323,4). 
flight(rome,greece , 1440, 1630, fs619,1). 
flight(rome,greece , 1440, 1630, fs619,3). 
flight(rome,greece , 1440, 1630, fs619,4). 
flight(rome,greece , 1440, 1630, fs619,5). 
flight(greece,rome , 1100, 1310, fs620,1). 
flight(greece,rome , 1100, 1310, fs620,3). 
flight(greece,rome , 1100, 1310, fs620,4). 
flight(greece,rome , 1100, 1310, fs620,5). 


% Start menu 
start :- repeat,nl,nl, 
     nl, write('============================='), 
     nl, write(' FLIGHT ENQUIRY SYSTEM '), 
     nl, write('============================='), 
     nl, write('1) Preferred Direct'), 
     nl, write('2) Preferred Fastest'), 
     nl, write('3) Quit'), 
     nl, nl, read(Option), 
     option(Option). 


% option 1 will terminate the program 
option(1) :- nl, write('Please Day of Flight in Numberic format (1 for Mon, 7 for Sun: '), 
read(Day), 
nl, write('Origin Country: '), 
read(Origin), checkOCountry(Origin, 0), nl, write('Dest Country: '), 
read(Dest), checkDCountry(Dest, 1)-> 
plane(Board,0), 
plane(Arrive,1), 
flightInfo(Board, Arrive,Start,End,FlightNo,Day), 
calculateTime(Start,End, DH,DM), 
nl,write('Flight No: '),write(FlightNo), 
%checkDH(DurH,DurM), 
nl,write('Flight Dur: '),write(DH),write(':'),write(DM), 
retractall(plane(X,Y)),!,fail. 

% option 3 will terminate the program 
option(3) :- nl, write('Program has terminated!'). 


% check if a country is valid 
checkOCountry(OCountry, Indicator) :- flight(OCountry,_,_,_,_,_) -> asserta(plane(OCountry, Indicator)); nl,write('Origin Country is invalid! Enter a valid Country: '), read(NewCountry),checkOCountry(NewCountry, Indicator). 
checkDCountry(DCountry, Indicator) :- flight(_,DCountry,_,_,_,_) -> asserta(plane(DCountry, Indicator)); nl,write('Destination Country is invalid! Enter a valid Country: '), read(NewCountry),checkDCountry(NewCountry, Indicator). 

flightInfo(Origin, Dest,Start,End, FlightNo,Day) :- flight(Origin, Dest,Start,End,FlightNo,Day). 


calculateTime(Start, End, DH,DM):- OriMin is mod(Start, 100), DestMin is mod(End, 100), OriHour is (Start - OriMin)/100, DestHour is (End - DestMin)/100, 
Y is DestHour - OriHour, X is DestMin - OriMin, 
(Y < 0 -> checkDH(OriHour, OriMin, DestHour,DestMin, DH, DM); 
X < 0 -> checkDM(Y,X, DM, DH); 
     DM is X, DH is Y 
    ). 

checkDM(Y, X , DM, DH):- DM is X + 60, DH is Y-1. 
checkDH(OriHour, OriMin, DestHour,DestMin, DH, DM) :- THour1 is ((24-OriHour)+DestHour), TMin1 is 0-OriMin, 
(TMin1< 0 -> THour is THour1 -1, TMin is ((60+ TMin1)+DestMin); 
THour is THour1, TMin is TMin1 
), 
(TMin > 60 -> DH is (THour + (TMin//60)), DM is mod(TMin, 60) ; 
DH is THour, DM is TMin 
). 
Смежные вопросы