一个人能在一个省份只经过一次的情况下把大陆31个省会城市自驾游一遍吗?

[复制链接]
mge192003 发表于 2023-8-30 09:34:59|来自:北京 | 显示全部楼层 |阅读模式
一个人能在一个省份只经过一次的情况下把大陆31个省会城市自驾游一遍吗?
全部回复5 显示全部楼层
eee1573 发表于 2023-8-30 09:35:36|来自:北京 | 显示全部楼层
有意思的问题!
没想到我的一句评论,在榜首答案下被选上了热评:
一个人能在一个省份只经过一次的情况下把大陆31个省会城市自驾游一遍吗?

既然没看到其他人回答,那我就自己动手,丰衣足食吧。
<hr/>首先,可以看到这是一个典型的“图论”问题,经过 @金小乙 的分析和简化,我们得到了一个31个顶点的无向平面图(不考虑港澳台)。“无向图”而不是“有向图”是考虑到相邻省会互相往返的距离是一样的。
然后,我用高德地图得到了各个相邻省会之间的自驾行驶距离(和预计时长),起点终点都是输入城市名后地图上的默认点,好像大部分都是市政府所在地。
这里会有一些细节的处理。比如,第一步分析中已经知道不可能经过的路径,这里就偷懒不算了。
麻烦一点的是,有些特殊情况——相邻省会直接的行驶路线会经过第三省。例如,呼和浩特到哈尔滨,默认路线就经过了河北省和吉林省,需要设置一些中途点“绕过”第三省。有意思地,我还发现成都与昆明间的最短路线——银昆高速,竟然有一小段经过了贵州省,所以不得不绕路。
这样,把数据标记到高赞回答的图里,就得到了权重图:


剩下的问题,就是有没有算法来求解遍历所有顶点最短路径的算法了。
图论里经典的算法有很多,最基本的就是深度优先搜索(DFS)和广度优先搜索(BFS),可以通过其中一种方法把所有能够遍历顶点的路径找出来,然后在比较最短路径。但这个事情需要编程,工作量有点大,就偷懒不弄了。
然后有人提到了Dijkstra算法,但其实在这个问题上是用不了的。因为Dijkstra算法只是用来计算两个顶点之间的最短路径,并不会遍历所有顶点。
在图论里,遍历所有顶点(同时又不走重复的边)的问题,叫做哈密顿路径问题(Hamiltonian path problem)。这是图论中的一个非常经典的问题,并且也是计算机科学中著名的NPC问题——即确定在一个给定的图中是否存在哈密顿路径。所以,很显然地,我们不可能找到一个“简单”的确定性算法来解决这个问题。
不过好在,问题涉及到我国的省市也不多,只有31个(即问题规模不大),所以如果一定要用计算机精确求解,也是可以做到的。
<hr/>最后,我只能靠“肉眼”求解了。
首先,起点一定是海口,终点只能是北京或天津。从京津冀的“三角形”可以看到,最短路径应该是石家庄-北京-天津的路线,但是鉴于首都的特殊意义,我还是选择把北京设为终点,毕竟也不差那30公里。
然后,我用了两种“肉眼”算法来分析。
一是从海口出发,先尽量沿着较短的路径前进,再分析判断不可能路径或者必须要走的路径,得到下图:


结果为总路程22373公里,用时266.3小时:


二是先考虑对总路程影响比较大的西部地区,比如西藏相邻最短的两条路线分别是川藏和青藏,所以就一进一出。排除新藏线后,新疆相邻路线就只剩下了青海、甘肃两个选项,所以西部路线选择成都-拉萨-西宁-乌鲁木齐-兰州,然后把一些不能走的路线排除,比如甘肃到内蒙就不行了(否则绕了一圈去不了上面的东北三省了),然后在从中尽量选择较短的路径,得到下图:


结果为总路程22019公里,用时263.4小时:


考虑到导航地图测量误差,两个结果可以说非常接近了。可能也是我“肉眼”看多了,形成了路径依赖,其实最后这两条路线非常接近,差别只在南宁到拉萨的路线选择不同(一个从滇藏线入藏,一个从川藏线入藏)。


如果再算上自驾游途中经停、住宿的额外路程,应该大致在25000公里的样子,同时导航时间不考虑吃饭睡觉,实际用时40天到60天(大概2个月)应该可以走完。
<hr/>今天就终结本回答吧,我写了个程序,遍历了从广州到呼和浩特的全部哈密顿路径,一共得到1873条路径,其中最短路径正是我“肉眼”发现的这一条:


即最短总路程22019公里,用时263.4小时。
既然都已经程序遍历,我还找了一下全部路径里的“最长路径”,如下:




即最长总路程26761公里,用时321.3小时。
可以看到,因为每个省(市)只能路经一次,在这个严格的条件限制下,实际上最长路线和最短路线上有很多重复的经由,所以实际上路程差距并不大(最长与最短只相差4700多公里)。
所以选一条喜欢的路线,走起,自驾游的驴友们!
卡珊德拉 发表于 2023-8-30 09:36:21|来自:北京 | 显示全部楼层
【补个前言】
这个问题的答案中有不少离散数学专业的图论玩家,我作为地图学专业的孩纸就不继续抄别人的作业了~我给大家来个感性一点的答案吧~
<hr/>【以下原答案】
大家还记得2008年的奥运火炬国内传递线路图(计划)吗?大概长这样⋯(图片来源于百度)


当年的火炬传递计划简直不要太完美!奥运圣火计划于2008年5月初从祖国的东南大门台湾省进入祖国,以先南后北的顺序依次经过全国各省区市,在每个省区大致传递两三天,最后在8月8日的奥运会开幕式当天到达北京。
这个线路中,除了港澳台和尚未通车的G15沈海高速渤海海峡隧道外,其他的部分可以说完美地贴合这个题目!其实把这个图的山东河南的顺序排到江苏和安徽中间就能完美解决渤海海峡的问题。
当然了,后来的事情大家也都知道了,火炬传递的顺序并没有完全按图上来。原因是汶川大地震⋯当时奥运火炬才进入中国没几天,还未传递到四川。所以实际执行的时候,火炬的传递活动直接跳过了四川,给四川留了一点重建的时间。最后,等到圣火完成在天津的传递即将进京之时,再重新安排时间在四川传递。因此四川成为了2008年奥运圣火进京之前的最后一站。

<hr/>【补个后记】
感谢知乎的护体大法。
我在后台看到很多在我这条答案下的留言被删,一开始还觉得很奇怪。后来我闲着无聊去看了一下这些人的知乎回答记录⋯哦,原来都是些杠精NC愤青精X键盘瞎⋯
谢谢知乎帮我挡住了这些不值得活在中国的人。祖国让你有饭吃有衣穿、供你上学读书能够拥有自己的精神世界,不是让你反过头来攻击她的。毕竟你自己如果养个崽儿,多少还会幻想一下你把他带大后他会不会帮你养个老⋯
所以啊,这些杠精NC愤青精X键盘瞎连自己过得还不错的小日子是哪位“金主爸爸”给的都不清楚,就在这里无差别攻击,只能是暴露了自己的无知和粗鄙。再次感谢知乎帮我清理掉这些于社会无用的杂鱼,净化网络环境人人有责~
最后,祖国万岁!在我心目中,最美的图案永远是:



没有之一。
没有之一。
没有之一。
菜鸟是我师傅 发表于 2023-8-30 09:36:51|来自:北京 | 显示全部楼层
可以!而且路径非常多(末尾有两种路径图)。


1分钟视频版本:
原始地图分析比较复杂,我们可以将问题简化,下面演示一下这类问题的分析思路。

  • 拿到一张中国省级地图:



  • 将陆地连接关系抽象并简化为关系图:



  • 重新布局,有助于分析。我们得到了一张十分美观的图形:



  • 不难发现,只有两处地方道路十分狭窄,无法走回头路,即京津冀琼州海峡,因此必须放在首与尾:



  • 然后标注出必须走和不能走的路径:



  • 到这里,问题就十分简单了。接下来请随意发挥吧~

备注:因为琼州海峡严格意义上不算陆地连接,但可以自驾通过,因此标记为虚线
<hr/>最后,提供两种可能的路径,仅供参考:

  • 路径1(关系图)



  • 路径1(示意图,穿越省会)



  • 路径2(关系图)



  • 路径2(示意图,穿越省会)



<hr/>另外,如果对最短路径感兴趣,可以移步我的另一个回答:
<a href="http://www.zhihu.com/answer/2838769210" data-draft-node="block" data-draft-type="link-card" data-image="http://pic2.zhimg.com/v2-64f4fb79b2d3f9747832678060b936ed_720w.jpg" data-image-width="1530" data-image-height="1126" class="internal">某人要在国内(大陆)把31个省市自治区首府自驾游一遍,试问他自驾游的最短路径是多少公里?
<hr/>
最后,关于港、澳、台三个省区,虽然题目排除掉了,但最后拿出来讲一下:

  • 如果考虑这三个省区,那么将没有答案。从关系图上可以看出,这三个地区都无法回头(或者无法联通)。
  • 希望大家理性看待这个话题。客观上讲,限定了“大陆31个省”才使得这个问题具有讨论的价值,甚至成为一个优秀的问题,才有了本篇回答存在的前提。
  • 希望早日看到G3京台高速真正贯通,我一定第一时间补上闽-台连接线。
<hr/>2023.05更新:
经过程序模拟,可能的路径数量为 3746 条。
路径热力如下(线越粗表示通过的路径越多,不会经过的线条直接删掉了):

rainpower 发表于 2023-8-30 09:37:02|来自:北京 | 显示全部楼层
我居然没注意问题是“31省市区“
那就是不包括港澳台了。那其实有解
海南-广东-广西-云南-西藏-新疆-青海-四川-重庆-贵州-湖南-江西-福建-浙江-上海-江苏-山东-安徽湖北-河南-山西-陕西-甘肃-宁夏-内蒙古-东北三省-河北-京津

泰晤士小镇 发表于 2023-8-30 09:37:37|来自:北京 | 显示全部楼层
嘿,这个问题挺有意思,我还真没有这么想过,于是我把这个问题当真了,花了些时间得到了以下结论。
首先我截了一张百度地图,然后在上面画箭头,看看能不能每个省市自治区只去一次,经过了多次尝试,得到了下面这张图。
但是我却不得不遗憾的表示,题主这个问题似乎无解!


从图上看,题主的问题是有答案的,从海南开始,每个省/区/市只经过一次,最后到达新疆。
但是我在尝试的过程中也遇到了一些问题:
1、第一个问题在于选择一个开始点,因为不能走回头路,所以海南只能是开始或者结束,因为它只连通广东省,没有第二条路,于是我把它放到了旅行的开始,而新疆作为了旅行的结束点。
2、另外一个问题在京津地区,因为它是被河北省包围着的,所以不能从河北进又从河北出。我开始设想从山东通过跨海大桥去到天津,然后从天津到达北京,再从北京到达河北后前往辽宁。可是我查阅资料之后却并没有找到从山东到天津的跨海大桥,甚至连轮渡都没有,所以这个设想不能成立。
如果假设这个问题被解决了,那么还有其它的问题吗?
从严格意义上来说,我并没有按照题主的要求精确的到达每个省/区/市的首府,在这里假设了只要到了省/区/市内就可以在不离开省/区/市的情况下到达其首府并且离开。
不过我挑选了一些省/区做模拟,发现这个假设是能成立。
所以,目前就剩下如何跨过河北去到京津地区这个问题了,在这点上如果没有解决方案,题主的问题就是无解的。
~~~~~
以上,感谢阅读! 希望从我的回答中能找到你要的答案。
请关注我,咱们一起感受旅行的快乐。
—— 海水茶杯鱼 2022-11-28 .2

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则