Loading

图的最短路径之杨贵妃荔枝自由

背景

《新唐书》记载,杨贵妃嗜荔枝,必欲生致之,乃置骑传送,走数千里,味未变,已至京师。

正文

此时已是二更天,我仍无心睡眠。

今日皇帝刚刚下旨,命令我们这些差管将刚刚成熟的荔枝送往京城,必须新鲜,否则就地问斩。

可蜀中到长安数千里,途径数十城市,如何寻得最短路径,将新鲜荔枝送入皇宫呢?

夜不能寐,便掌了一盏灯,坐在书房苦思。

夫人听见了动静,来到我旁边,看我唉声叹气,便宽慰到:"相公,事到如此也无甚好办法。皇命不可违,我们只能走一步看一步吧。"

我听了,无奈摇摇头,喃喃到:"若找不到最短路径,我们就是日夜奔驰,快马加鞭,也无法完成皇命啊,怎么能说走一步看一步,走一步看一步。。。"

这时,我突然想到了什么,拿出纸和笔,推算了一遍,我似乎找到了破解之法。

夫人凑近问道:"相公可是寻得什么法子?"

我笑到:"还是夫人提醒了我啊,这个法子就是 走一步看一步!"

"哦,这是何意?"

我在纸上画到

地图

"夫人请看,我们可以画个简略的从蜀中到长安的地图。

如图所示,当前我们身处蜀中,从蜀中到长安有可能途经任何一个城市。

但从从蜀中来看,我们可去的城市只有佳城 宜城 二城,距离分别是45

地图

按照夫人所言,走一步,那我们就去离蜀中最近的城市,即佳城

假设我们已经到了佳城,环城四顾,也就是看一步,发现还没有去过并且相邻的城市有 宜城冰城
我们分别梳理一下

  1. 宜城

当我们在蜀中的时候,记录下来蜀中 宜城的最近距离是5,途经 蜀中->宜城。
现在发现从佳城也可以到宜城,但是距离是蜀中佳城的最近距离加佳城 宜城之间的距离,即4+4=8,刚才是5,现在是8,所以蜀中宜城的最短距离和路径不变。

  1. 冰城

我们之前还没有记录过冰城的相关信息,所以直接记下蜀中冰城的途径为 蜀中 ->佳城->冰城,距离为蜀中佳城的最近距离加佳城冰城的距离,即4+5=9

红色代表已去过城市

地图

路径图

然后,我们再走一步看一步

此时,我们再挑一个我们没有去过并且距离蜀中最近的城市,上图所示,此次我们要去宜城

到达宜城之后,我们又看一步,发现宜城相邻的并且没有去过的城市只有鼎城

那比较简单,直接记录下蜀中鼎城的最近距离和路径。

地图

路径图

好的,到了这一步夫人可知如何进行下一步吗?"

"我知道啊,自然还是 走一步 ,可以当前冰城鼎城距离都是9,我们该去哪座城市呢?"

"好问题,既然距离一样,那我们随机去哪一个都行。让我想一下,夫人冰雪聪明,那我们就去冰城吧"。

夫人娇嗔到:"相公又拿我打岔,我们先干正事吧!"

我笑到:"来,我们接着走。此时我们到了冰城,又 看一步,即发现冰城相邻的并且没有去过的城市只有子城
所以如下图所示

地图

路径图

此时我们再次选择距离蜀中最近并且没有去过的城市,为鼎城
到达鼎城之后,相邻的并且没有去过的城市只有长安,也就是我们的最终目的地。

地图

路径图

夫人叹道:"真不容易啊,我们终于到了长安了!"

我:"慢,从路径图中我们看到子城我们还没有去,而且从这个城市到长安的路径可能更近。我们来看。

这次我们距离蜀中最近并且没有去过的城市,即子城,到达子城之后,发现相邻的并且没有去过的城市只有长安,并且计算出来从子城长安的距离为12+2=14,小于从鼎城长安的距离16,所以需要更新长安的最短距离为14,并记下

地图

路径图

走到此时,我们还按照之前方法走的话,发现距离蜀中最近并且没有去的城市只有长安了。等到了长安,发现已无剩余城市可去。

此时,我们的结果也呼之欲出。"

夫人在旁边开心的跳了起来,我也长叹了一口气,实际情况虽比图中描述复杂很多,但最起码有了路子可以寻到最短路径了。

此时东方既白,鸡鸣响起,我推开门,朝阳如鲜花绽放,如水波四散。

我站在院里,望向远方,好像看见了长安。


创过业,赔过钱。遂转行,程序员。

从外包,到大厂。写代码,写文章。

胡思乱想,文章沙雕。

欢迎关注,与君同好。

posted @ 2021-03-18 10:20  码农小说家  阅读(3262)  评论(1编辑  收藏  举报