好的,所以也许我会再尝试解决这个问题。上次,我没有注意到您可以多次访问一个点的事实,因此建议可能是错误的。
首先,假设“开始”,“结束”和“灰色”节点的总数为N,并且“开始”为0,“结束”为N-1,“灰色”节点的总数为1到N-2。
我们可以看到我们可以state
随时(mask, index)
用表示,其中index表示我们所在的当前节点,mask表示我们已经访问过的所有节点(0 <mask <2 ^ N)。
首先,状态为(1,0)或(00000 … 1,0),这意味着仅访问了城市0,我们的目标是到达状态(2 ^ N-1,N-1),这意味着访问所有节点,然后在节点N-1结束旅程。
因此,在这一点上,我们可以很容易地看到,我们已经将原始问题转换为状态图,并且我们的目标是找到从状态0(1,0)到状态末端(2 ^ N-1)的最短路径。 ,N-1),因此,对这个新图应用Dijkstra最短路径算法,我们就得到了答案。
注意:答案基于一个假设,即N <= 17
另一个要注意的是:对于机器人技术,最短的路径可能并不一定是最佳的路径,因为机器人在旋转和直线运行时的速度是不同的。