图的最短路径之杨贵妃荔枝自由
背景
《新唐书》记载,杨贵妃嗜荔枝,必欲生致之,乃置骑传送,走数千里,味未变,已至京师。
正文
此时已是二更天,我仍无心睡眠。
今日皇帝刚刚下旨,命令我们这些差管将刚刚成熟的荔枝送往京城,必须新鲜,否则就地问斩。
可蜀中到长安数千里,途径数十城市,如何寻得最短路径,将新鲜荔枝送入皇宫呢?
夜不能寐,便掌了一盏灯,坐在书房苦思。
夫人听见了动静,来到我旁边,看我唉声叹气,便宽慰到:"相公,事到如此也无甚好办法。皇命不可违,我们只能走一步看一步吧。"
我听了,无奈摇摇头,喃喃到:"若找不到最短路径,我们就是日夜奔驰,快马加鞭,也无法完成皇命啊,怎么能说走一步看一步,走一步看一步。。。"
这时,我突然想到了什么,拿出纸和笔,推算了一遍,我似乎找到了破解之法。
夫人凑近问道:"相公可是寻得什么法子?"
我笑到:"还是夫人提醒了我啊,这个法子就是 走一步看一步!"
"哦,这是何意?"
我在纸上画到
"夫人请看,我们可以画个简略的从蜀中到长安的地图。
如图所示,当前我们身处蜀中,从蜀中到长安有可能途经任何一个城市。
但从从蜀中来看,我们可去的城市只有佳城
宜城
二城,距离分别是4
和5
。
即
按照夫人所言,走一步
,那我们就去离蜀中最近的城市,即佳城
。
假设我们已经到了佳城
,环城四顾,也就是看一步
,发现还没有去过并且相邻的城市有 宜城
,冰城
。
我们分别梳理一下
- 宜城
当我们在蜀中
的时候,记录下来蜀中
宜城
的最近距离是5,途经 蜀中->宜城。
现在发现从佳城
也可以到宜城
,但是距离是蜀中
与佳城
的最近距离加佳城
宜城
之间的距离,即4+4=8
,刚才是5
,现在是8
,所以蜀中
到宜城
的最短距离和路径不变。
- 冰城
我们之前还没有记录过冰城
的相关信息,所以直接记下蜀中
到冰城
的途径为 蜀中 ->佳城->冰城,距离为蜀中
与佳城
的最近距离加佳城
与冰城
的距离,即4+5=9
。
红色代表已去过城市
然后,我们再走一步看一步
。
此时,我们再挑一个我们没有去过并且距离蜀中
最近的城市,上图所示,此次我们要去宜城
。
到达宜城
之后,我们又看一步
,发现宜城
相邻的并且没有去过的城市只有鼎城
。
那比较简单,直接记录下蜀中
到鼎城
的最近距离和路径。
好的,到了这一步夫人可知如何进行下一步吗?"
"我知道啊,自然还是 走一步
,可以当前冰城
和鼎城
距离都是9
,我们该去哪座城市呢?"
"好问题,既然距离一样,那我们随机去哪一个都行。让我想一下,夫人冰雪聪明,那我们就去冰城
吧"。
夫人娇嗔到:"相公又拿我打岔,我们先干正事吧!"
我笑到:"来,我们接着走。此时我们到了冰城
,又 看一步
,即发现冰城
相邻的并且没有去过的城市只有子城
。
所以如下图所示
此时我们再次选择距离蜀中
最近并且没有去过的城市,为鼎城
。
到达鼎城
之后,相邻的并且没有去过的城市只有长安
,也就是我们的最终目的地。
夫人叹道:"真不容易啊,我们终于到了长安
了!"
我:"慢,从路径图中我们看到子城
我们还没有去,而且从这个城市到长安
的路径可能更近。我们来看。
这次我们距离蜀中
最近并且没有去过的城市,即子城
,到达子城
之后,发现相邻的并且没有去过的城市只有长安
,并且计算出来从子城
到长安
的距离为12+2=14
,小于从鼎城
到长安
的距离16
,所以需要更新长安
的最短距离为14
,并记下
走到此时,我们还按照之前方法走的话,发现距离蜀中
最近并且没有去的城市只有长安
了。等到了长安
,发现已无剩余城市可去。
此时,我们的结果也呼之欲出。"
夫人在旁边开心的跳了起来,我也长叹了一口气,实际情况虽比图中描述复杂很多,但最起码有了路子可以寻到最短路径了。
此时东方既白,鸡鸣响起,我推开门,朝阳如鲜花绽放,如水波四散。
我站在院里,望向远方,好像看见了长安。
创过业,赔过钱。遂转行,程序员。
从外包,到大厂。写代码,写文章。
胡思乱想,文章沙雕。
欢迎关注,与君同好。