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