城市間最短距離Prolog來源程式

來源:互聯網
上載者:User

一道作業題:  已知北京、上海、廣州、昆明和西安五城市航線裡程如圖。分別實現: 1)找到北京到昆明的最短路徑。 2)找到北京到昆明,必須途徑上海的路徑。 3)找到北京到昆明,必須途徑上海,但不能去廣州的路徑。    

 

北京

上海

廣州

昆明

西安

北京

 

 

 

 

 

上海

1462

 

 

 

 

廣州

2107

1811

 

 

 

昆明 3179 2677 2216

 

 

西安 1165 1511 2129 1942

 

Visual Prolog來源程式: domains
  city=symbol
  citylist=city*
  distance=integer
predicates
  nondeterm road(city,city,distance)
  nondeterm connected(city,city,distance)
  nondeterm route(city,city,citylist,citylist,distance)
  member(city,citylist)
  showAllRoutes(city,city)
  shorterRouteExist(city,city,distance)
  showShortestRoute(city,city)
  showMustPassRoutes(city,city,city)
  showMustNotPassRoutes(city,city,city,city)
  writeRoute(city,citylist,distance)
  reverse_list(citylist,citylist,citylist)
clauses
  road(beijing,shanghai,1462).road(beijing,guangzhou,2107).
  road(beijing,kunming,3179).road(beijing,xi_an,1165).
  road(shanghai,guangzhou,1811).road(shanghai,kunmig,2677).
  road(shanghai,xi_an,1511).road(guangzhou,kunming,2216).
  road(guangzhou,xi_an,2129).road(kunming,xi_an,1942).
 
  connected(City1,City2,Distance):-road(City1,City2,Distance).
  connected(City1,City2,Distance):-road(City2,City1,Distance).
 
  member(X,[X|_]):-!.
  member(X,[_|L]):-member(X,L).
 
  route(City,City,VisitedCities,VisitedCities,0):-!.
  route(City1,City2,VisitedCities,ResultVisitedCities,Distance):-
          connected(City1,X,Distance1),
          not(member(X,VisitedCities)),
          route(X,City2,[X|VisitedCities],ResultVisitedCities,Distance2),
          Distance=Distance1+Distance2.
  showAllRoutes(City1,City2):-
     write("All routes between ",City1," and ",City2," are:/n"),
     route(City1,City2,[City1],VisitedCities,Distance),
     writeRoute(City1,VisitedCities,Distance),nl,
     fail.
  showAllRoutes(_,_).
 
  showMustPassRoutes(City1,City2,City3):-
     write("All routes between ",City1," and ",City2," must pass ",City3," are:/n/n"),
     route(City1,City2,[City1],VisitedCities,Distance),
     member(City3,VisitedCities),
     writeRoute(City1,VisitedCities,Distance),nl,
     fail.
  showMustPassRoutes(_,_,_).
 
  showMustNotPassRoutes(City1,City2,City3,City4):-
     write("All routes between ",City1," and ",City2," must pass ",City3," but does'nt pass ",City4," are:/n/n"),
     route(City1,City2,[City1],VisitedCities,Distance),
     member(City3,VisitedCities),
     not(member(City4,VisitedCities)),
     writeRoute(City1,VisitedCities,Distance),nl,
     fail.
  showMustNotPassRoutes(_,_,_,_).
 
  shorterRouteExist(City1,City2,Distance):-
     route(City1,City2,[City1],_,Distance1),
     Distance1<Distance,!.
    
  showShortestRoute(City1,City2):-
     write("Shortest route between ",City1," and ",City2," is:/n/n"),
     route(City1,City2,[City1],VisitedCities,Distance),
     not(shorterRouteExist(City1,City2,Distance)),
     writeRoute(City1,VisitedCities,Distance),nl,
     fail.
  showShortestRoute(_,_).
 
  writeRoute(City1,[City1|VisitedCities],Distance):-
    !,
    Cities=[City1|VisitedCities],
    write("    ",Cities," the distance is ",Distance),nl.
  writeRoute(_,VisitedCities,Distance):-
    reverse_list(VisitedCities,[],VisitedCities_Reversed),
    write("    ",VisitedCities_Reversed," the distance is ",Distance),nl.
 
  reverse_List([],LIST,LIST):-!.
  reverse_List([H|SeenListReset],Interm,SeenList):-
    reverse_List(SeenListReset,[H|Interm],SeenList). goal
  showShortestRoute(beijing,kunming),
  showMustPassRoutes(beijing,kunming,shanghai),
  showMustNotPassRoutes(beijing,kunming,shanghai,guangzhou).
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.