最優乘車 bfs

2021-10-01 07:41:14 字數 1982 閱讀 4644

description:

* h城是乙個旅遊勝地,每年都有成千上萬的人前來觀光。為方便遊客,巴士公司在各個旅遊景點及賓館,飯店等地都設定了巴士站並開通了一些單程巴上線路。每條單程巴士線路從某個巴士站出發,依次途經若干個巴士站,最終到達終點巴士站。

一名旅客最近到h城旅遊,他很想去s公園遊玩,但如果從他所在的飯店沒有一路已士可以直接到達s公園,則他可能要先乘某一路巴士坐幾站,再下來換乘同一站台的另一路巴士, 這樣換乘幾次後到達s公園。

現在用整數1,2,…n 給h城的所有的巴士站編號,約定這名旅客所在飯店的巴士站編號為1…s公園巴士站的編號為n。

寫乙個程式,幫助這名旅客尋找乙個最優乘車方案,使他在從飯店乘車到s公園的過程中換車的次數最少。

input

輸入的第一行有兩個數字m和n(1<=m<=100 1

output

輸出檔案只有一行。如果無法乘巴士從飯店到達s公園,則輸出"n0",否則輸出你的程式所找到的最少換車次數,換車次數為0表示不需換車即可到達•

由題意得:最優化問題!!我們可以用bfs.由於他們的代價不同,所以我們要預處理。

for

(int i=

1;i<=text[0]

-1;i++

)for

(int j=i+

1;j<=text[0]

;j++

) a[text[i]

][text[j]]=

1;

將他們只要是同一條巴士線路的站點的代價都設為一。

解決了代價問題,即可用bfs求解。(注意要標識走過的點!! )

void

bfs()}

}while

(head

!f[n]);

if(head==tail)

printf

("no");

else

printf

("%d"

,temp[n]);

}

#include

#include

#include

using

namespace std;

int a[

1010][

1010

],text[

1010

],fa[

1010

],temp[

1010

],f[

1010];

int m,n;

void

bfs()}

}while

(head

!f[n]);

if(head==tail)

printf

("no");

else

printf

("%d"

,temp[n]);

}int

main()

while

(x!=

'\n'

&&x!=

eof)

; text[0]

--;for(

int i=

1;i<=text[0]

-1;i++

)//預處理

for(

int j=i+

1;j<=text[0]

;j++

) a[text[i]

][text[j]]=

1;}bfs()

;return0;

}

920 最優乘車 BFS 流式輸入

h城是乙個旅遊勝地,每年都有成千上萬的人前來觀光。為方便遊客,巴士公司在各個旅遊景點及賓館,飯店等地都設定了巴士站並開通了一些單程巴士線路。每條單程巴士線路從某個巴士站出發,依次途經若干個巴士站,最終到達終點巴士站。一名旅客最近到h城旅遊,他很想去s公園遊玩,但如果從他所在的飯店沒有一路巴士可以直接...

BFS 最優乘車(90分已修改)

h城是乙個旅遊勝地,每年都有成千上萬的人前來觀光。為方便遊客,巴士公司在各個旅遊景點及賓館,飯店等地都設定了巴士站並開通了一些單程巴上線路。每條單程巴士線路從某個巴士站出發,依次途經若干個巴士站,最終到達終點巴士站。一名旅客最近到h城旅遊,他很想去s公園遊玩,但如果從他所在的飯店沒有一路已士可以直接...

1377 最優乘車 travel

h城是乙個旅遊勝地,每年都有成千上萬的人前來觀光。為方便遊客,巴士公司在各個旅遊景點及賓館,飯店等地都設定了巴士站並開通了一些單程巴士線路。每條單程巴士線路從某個巴士站出發,依次途經若干個巴士站,最終到達終點巴士站。一名旅客最近到h城旅遊,他很想去s公園遊玩,但如果從他所在的飯店沒有一路巴士可以直接...