【发布时间】:2020-09-25 23:26:51
【问题描述】:
你和几个朋友正在玩棋盘游戏。游戏的棋盘布局在一个具有许多循环的大型互连图中。每个玩家从棋盘上的不同位置开始。轮到你时,你可以掷出 1 到 6 个 6 面骰子之间的任何东西(换句话说,1 到 36 之间的任何东西)。您如何确定从当前位置转一圈可以到达的每个空间? (例如:我掷出 13。找出棋盘上距离我 13 格的所有点。) 你只能向前移动,但你可以绕圈走一圈,总的数小于你的掷骰数.
示例:如果这是您的图表,并且您从左上角开始并掷出 6,那么您可以移动的位置是下、右、右、上、左、左。 但是你不能向右、向左、向右、向左、向右、向左移动。
o---o---o---o---o
| | |
o---o---o---o
有没有比深度优先搜索更好的算法?
【问题讨论】:
-
是作业的一部分还是你的问题?此外,路径中是否存在循环,例如你能在两个节点之间来回走 6 次,然后再往前走吗?
-
@tobias_k 这是我的问题。
-
您应该使用广度优先搜索。这是最佳选择。
-
@ciamej 为什么选择广度优先?
-
深度优先搜索(递归深度受附加参数限制)可用于解决所描述的问题(您显然很清楚)。可达后继区域内的每条边最多将被遍历一次。如果输入图是一棵树,它将被准确地遍历一次。我认为没有比这更好的可能性了。否则,算法的结果不可能依赖于整个输入。亚线性运行时间是一种罕见的现象。
标签: algorithm graph-algorithm graph-traversal