2012-05-05 12 views
2

状況があります:私はPrologの特定の行に宣言されたロンドン地下のほとんどの部分を持っています。私はいくつかの駅で3行を持っており、それらはすべて共通点を持っています。Prologでマップの2つのポイント間で共通の駅を見つける方法はありますか?

The map of the underground

私は、引数が互いに、彼らは上にあるどのような行の横局であるステーションの事実を、持っています。マップ上のステーションの完全なリストがあります:

neighbour(south_kensington,victoria,green). 
neighbour(victoria,westminster,green). 
neighbour(westminster,embankment,green). 
neighbour(embankment,blackfriars,green). 
neighbour(vauxhall,victoria,blue). 
neighbour(victoria,green_park,blue). 
neighbour(green_park,oxford_circus,blue). 
neighbour(oxford_circus,warren_street,blue). 
neighbour(warren_street,euston,blue). 
neighbour(warren_street,tottenham_court_road,black). 
neighbour(tottenham_court_road,leichester_square,black). 
neighbour(leichester_square,charing_cross,black). 
neighbour(charing_cross,embankbent,black). 
neighbour(embankment,waterloo,black). 

問題がある:私は(彼らは別のライン上にある)AからBに行きたいと氏Prologのは、私は変更する必要のある駅で言うべきライン。例:A:チャリングクロス。 B:ウェストミンスター;変更点:堤防

+1

これは宿題のように聞こえるでしょうか? –

+1

ええ、確かにそうです:D –

+1

どこから始めるべきかわからない場合は、進歩(ソースコード)があれば書籍を再読してください。ここで時間厳守の質問。 –

答えて

2

問題の声明は完全には明確ではありません。あなたは1つの変更だけのルートを探していますか、いくつかの変更が可能です。

1)チューブの一部をVauxhallからWaterlooに移動することを検討してください。ウェストミンスターを経由するルートは2回あり、ウォーレン・ストリートを経由するルートは1回だけです。両方のルートが受け入れ可能か、それともどちらか一方だけですか?

2) 近隣(charing_cross、embankbent、black)の堤防ステーションの名前のタイプミスを修正します。

3)場合は保持し、駅StがラインLi上で、クエリstation_on_line(St,blue)のために、それは正確に一度、各ステーションを返すこと、および同様に各ラインビクトリアを返しstation_on_line(victoria,Li)確認した場合にのみ述語station_on_line(セント、リチウム)を定義駅は一度だけオンです。

4)行L1およびL2がステーションCで会合する場合に真となる述語change_at(L1,L2,C)を定義します。

5)ケース3)および4)は、1つの変更のみが許容される場合、すなわちヴォクスホールからウェストミンスターを経由してウォータールーへの経路が1)で許容されない場合、ステーションを変更するのに十分である。

6)任意の数の行を持つネットワーク上の任意の数のステーションを通るパスを見つけることを可能にする再帰的な定義を設計します。

関連する問題