終于刷完了——PAT甲級(jí)-1131. Subway Map (30)

題意不說(shuō)了,有特殊要求的最短路。對(duì)于單源最短路,我是無(wú)腦上SPFA,SPFA也寫(xiě)了不下十遍,然而這次沒(méi)有處理好。關(guān)于SPFA,多說(shuō)幾句,個(gè)人感覺(jué)就是優(yōu)化的BFS,優(yōu)化在哪了呢?就是對(duì)入隊(duì)的節(jié)點(diǎn)有標(biāo)準(zhǔn),只有對(duì)當(dāng)前狀態(tài)可能有幫助的節(jié)點(diǎn)才會(huì)入隊(duì),有一種“松弛”的感覺(jué),而且個(gè)人感覺(jué)這其實(shí)是建一棵樹(shù)的過(guò)程。

然而這次在25分卡了好久,最后總算想到了自己哪里沒(méi)考慮周全,這里是AC代碼。題中說(shuō)如果最短路不止一條,取換乘最少的,此結(jié)果唯一。我的做法是dis數(shù)組保存距離,cnt數(shù)組保存換乘次數(shù),preS保存前驅(qū)車(chē)站,preL保存前驅(qū)線路id。對(duì)于隊(duì)首的節(jié)點(diǎn),對(duì)其相連的點(diǎn)做松弛操作,而這里就是關(guān)鍵。距離變短了,肯定要松弛(修改前驅(qū))并入隊(duì);距離不變,但換乘變少,肯定也要修改。那距離和換乘都不變的話,要不要入隊(duì)呢?

答案是肯定的。又回到了本題給出的前提,所謂的結(jié)果唯一,但是中間結(jié)果不一定唯一(聯(lián)想到最優(yōu)子結(jié)構(gòu))。而我最開(kāi)始卻沒(méi)有入隊(duì),也就是代碼第54行,最初寫(xiě)的是“<”號(hào)而不是“<=”,如下,具體的反例注釋在了代碼最后。其實(shí)還有個(gè)問(wèn)題,這樣會(huì)不會(huì)無(wú)限循環(huán)(不停入隊(duì)出隊(duì))?其實(shí)是不會(huì)的,這個(gè)問(wèn)題留給讀者思考。

if (tmp <=cnt[v])

{

……

}

網(wǎng)上大佬們貌似都是清一色的dfs,把整個(gè)路徑都存下來(lái),然后判斷、取舍、輸出,所有的路徑都會(huì)走到,因而不會(huì)出現(xiàn)我這樣的問(wèn)題。其實(shí)只有這類(lèi)“答案不唯一,但是XXX這樣的答案保證唯一”這種情況下才容易發(fā)生我這樣的錯(cuò)誤。所以教訓(xùn)就是:要么考慮周全,想清楚最優(yōu)子結(jié)構(gòu)是否唯一,不唯一怎么辦;要么就采用穩(wěn)妥的方法,多寫(xiě)幾行代碼,比如記錄下所有的路徑,之后再作判斷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 搜索迷宮(BFS+隊(duì)列) 最短路Dijkstra+鄰接矩陣Dijkstra+鏈?zhǔn)角跋蛐?優(yōu)先隊(duì)列Bellma...
    染微言閱讀 436評(píng)論 0 1
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學(xué)在校門(mén)口照了最后一張合照,搬離寢室打車(chē)去了提前租...
    RichardJieChen閱讀 5,173評(píng)論 0 12
  • 1. AQS簡(jiǎn)介 原創(chuàng)文章&經(jīng)驗(yàn)總結(jié)&從校招到A廠一路陽(yáng)光一路滄桑 詳情請(qǐng)戳www.codercc.com 在上一...
    你聽(tīng)___閱讀 23,797評(píng)論 10 73
  • 第三章 Java內(nèi)存模型 3.1 Java內(nèi)存模型的基礎(chǔ) 通信在共享內(nèi)存的模型里,通過(guò)寫(xiě)-讀內(nèi)存中的公共狀態(tài)進(jìn)行隱...
    澤毛閱讀 4,384評(píng)論 2 22
  • 今天下了決定花了2000大洋準(zhǔn)備和別人拼班,買(mǎi)了教程和資料,想到之前還專(zhuān)門(mén)去北京買(mǎi)了11本書(shū)背回來(lái),這樣的氣勢(shì)沖...
    Merphy1閱讀 217評(píng)論 1 0