圖的最短路徑之楊貴妃荔枝自由
阿新 • • 發佈:2021-03-18
## 背景
《新唐書》記載,楊貴妃嗜荔枝,必欲生致之,乃置騎傳送,走數千裡,味未變,已至京師。
## 正文
此時已是二更天,我仍無心睡眠。
今日皇帝剛剛下旨,命令我們這些差管將剛剛成熟的荔枝送往京城,必須新鮮,否則就地問斬。
可蜀中到長安數千裡,途徑數十城市,如何尋得最短路徑,將新鮮荔枝送入皇宮呢?
夜不能寐,便掌了一盞燈,坐在書房苦思。
夫人聽見了動靜,來到我旁邊,看我唉聲嘆氣,便寬慰到:"相公,事到如此也無甚好辦法。皇命不可違,我們只能走一步看一步吧。"
我聽了,無奈搖搖頭,喃喃到:"若找不到最短路徑,我們就是日夜賓士,快馬加鞭,也無法完成皇命啊,怎麼能說走一步看一步,走一步看一步。。。"
這時,我突然想到了什麼,拿出紙和筆,推算了一遍,我似乎找到了破解之法。
夫人湊近問道:"相公可是尋得什麼法子?"
我笑到:"還是夫人提醒了我啊,這個法子就是 走一步看一步!"
"哦,這是何意?"
我在紙上畫到
![地圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615982464934-image.png)
"夫人請看,我們可以畫個簡略的從蜀中到長安的地圖。
如圖所示,當前我們身處蜀中,從蜀中到長安有可能途經任何一個城市。
但從從蜀中來看,我們可去的城市只有```佳城``` ```宜城``` 二城,距離分別是```4```和```5```。
即
![地圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615982574957-image.png)
按照夫人所言,```走一步```,那我們就去離蜀中最近的城市,即```佳城```。
假設我們已經到了```佳城```,環城四顧,也就是```看一步```,發現還沒有去過並且相鄰的城市有 ```宜城```,```冰城```。
我們分別梳理一下
1. 宜城
當我們在```蜀中```的時候,記錄下來```蜀中``` ```宜城```的最近距離是5,途經 蜀中->宜城。
現在發現從```佳城```也可以到```宜城```,但是距離是```蜀中```與```佳城```的最近距離加```佳城``` ```宜城```之間的距離,即```4+4=8```,剛才是```5```,現在是```8```,所以```蜀中```到```宜城```的最短距離和路徑不變。
2. 冰城
我們之前還沒有記錄過```冰城```的相關資訊,所以直接記下```蜀中```到```冰城```的途徑為 蜀中 ->佳城->冰城,距離為```蜀中```與```佳城```的最近距離加```佳城```與```冰城```的距離,即```4+5=9```。
> 紅色代表已去過城市
![地圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615982800716-image.png)
![路徑圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615983549144-image.png)
然後,我們再```走一步看一步```。
此時,我們再挑一個我們沒有去過並且距離```蜀中```最近的城市,上圖所示,此次我們要去```宜城```。
到達```宜城```之後,我們又```看一步```,發現```宜城```相鄰的並且沒有去過的城市只有```鼎城```。
那比較簡單,直接記錄下```蜀中```到```鼎城```的最近距離和路徑。
![地圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615982886805-image.png)
![路徑圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615982900477-image.png)
好的,到了這一步夫人可知如何進行下一步嗎?"
"我知道啊,自然還是 ```走一步``` ,可以當前```冰城```和```鼎城```距離都是```9```,我們該去哪座城市呢?"
"好問題,既然距離一樣,那我們隨機去哪一個都行。讓我想一下,夫人冰雪聰明,那我們就去```冰城```吧"。
夫人嬌嗔到:"相公又拿我打岔,我們先幹正事吧!"
我笑到:"來,我們接著走。此時我們到了```冰城```,又 ```看一步```,即發現```冰城```相鄰的並且沒有去過的城市只有```子城```。
所以如下圖所示
![地圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615982976889-image.png)
![路徑圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615982986112-image.png)
此時我們再次選擇距離```蜀中```最近並且沒有去過的城市,為```鼎城```。
到達```鼎城```之後,相鄰的並且沒有去過的城市只有```長安```,也就是我們的最終目的地。
![地圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615983045072-image.png)
![路徑圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615983057354-image.png)
夫人嘆道:"真不容易啊,我們終於到了```長安```了!"
我:"慢,從路徑圖中我們看到```子城```我們還沒有去,而且從這個城市到```長安```的路徑可能更近。我們來看。
這次我們距離```蜀中```最近並且沒有去過的城市,即```子城```,到達```子城```之後,發現相鄰的並且沒有去過的城市只有```長安```,並且計算出來從```子城```到```長安```的距離為```12+2=14```,小於從```鼎城```到```長安```的距離```16```,所以需要更新```長安```的最短距離為```14```,並記下
![地圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615983166308-image.png)
![路徑圖](https://gitee.com/hanqier/picture/raw/master/2021-3-17/1615983175228-image.png)
走到此時,我們還按照之前方法走的話,發現距離```蜀中```最近並且沒有去的城市只有```長安```了。等到了```長安```,發現已無剩餘城市可去。
此時,我們的結果也呼之欲出。"
夫人在旁邊開心的跳了起來,我也長嘆了一口氣,實際情況雖比圖中描述複雜很多,但最起碼有了路子可以尋到最短路徑了。
此時東方既白,雞鳴響起,我推開門,朝陽如鮮花綻放,如水波四散。
我站在院裡,望向遠方,好像看見了長安。
---
> 創過業,賠過錢。遂轉行,程式設計師。
>
> 從外包,到大廠。寫程式碼,寫文章。
>
> 胡思亂想,文章沙雕。
>
> 歡迎關注,與君同好。
>
>![](https://gitee.com/hanqier/picture/raw/master/2021-3-9/1615264523189-image.png)