我需要一个算法,能够给我一条从起始节点到结束节点的路径,但是这条路径必须有确切数量的节点,否则路径规划应该失败。
具体来说,我有一个方块网格。移动只能在紧邻的上、下、左或右方块中进行(即无对角线移动)。有许多规则可以确定哪些方块可以使用在路径中,哪些不行,但大多可以简化为一个简单的布尔值来告诉我们这个方块是否可以使用(这可以在开始算法之前计算出来)。让我头疼的问题是,我有一个规定好的路径距离,也就是说,从一个方块到相邻方块的每次移动距离都是一单位长度,整个路径应该有一个指定的距离,不多不少。此外,一旦踏上了一个方块(但所有方块都在算法开始时可用),就不能再踏上它了,有点像玩老的贪吃蛇游戏时要小心不要撞到自己。
我看过Dijkstra/A*算法,并搜索了寻路算法的相关信息,但据我所知,所有算法都集中于最短路径,这对我没有什么帮助。我并不关心它是哪条路径,只要它遵循上述规则即可。
我错过了什么,是否已经存在这样的算法,或者是否有一种简单的方法修改Dijkstra/A*来得到这个结果? 由于我不是以英语为母语的人,我可能使用了错误的术语,因此我欢迎这种算法的关键词建议。
这里是我所说的必须是确切距离并且不能使用相同方块的示例说明:
假设距离必须为7。现在将可以在路径中使用的方块用O标记出来,不能使用的则用X表示,起点用S表示,目标用E表示。
关于最大距离,以下是距离的范围。玩家将掷骰子并得到1-6的数字。如果玩家得到6,则再次掷骰子,如果他再次得到6,则继续掷骰子,直到他没有得到6。距离是结果数字加上玩家拾取的物品数量,理论上可以达到8,但通常为0-3或4。
另外,我刚刚收到新的规则,游戏规则改变为允许在同一路径上两次踏上相同的位置,我认为这极大地简化了流程,但我会保留这个问题,因为我认为它有很好的答案,可以帮助处于这种情况的人。
具体来说,我有一个方块网格。移动只能在紧邻的上、下、左或右方块中进行(即无对角线移动)。有许多规则可以确定哪些方块可以使用在路径中,哪些不行,但大多可以简化为一个简单的布尔值来告诉我们这个方块是否可以使用(这可以在开始算法之前计算出来)。让我头疼的问题是,我有一个规定好的路径距离,也就是说,从一个方块到相邻方块的每次移动距离都是一单位长度,整个路径应该有一个指定的距离,不多不少。此外,一旦踏上了一个方块(但所有方块都在算法开始时可用),就不能再踏上它了,有点像玩老的贪吃蛇游戏时要小心不要撞到自己。
我看过Dijkstra/A*算法,并搜索了寻路算法的相关信息,但据我所知,所有算法都集中于最短路径,这对我没有什么帮助。我并不关心它是哪条路径,只要它遵循上述规则即可。
我错过了什么,是否已经存在这样的算法,或者是否有一种简单的方法修改Dijkstra/A*来得到这个结果? 由于我不是以英语为母语的人,我可能使用了错误的术语,因此我欢迎这种算法的关键词建议。
这里是我所说的必须是确切距离并且不能使用相同方块的示例说明:
假设距离必须为7。现在将可以在路径中使用的方块用O标记出来,不能使用的则用X表示,起点用S表示,目标用E表示。
X X X X X X X X O O E S O O X O O O O O O如果没有距离限制,就可以向左走,问题解决了。 如果有距离限制但没有“不能在同一个方块上停留”的限制,则可以向下移动一次,然后向左、右、左、右、左、上移动,最后到达目标。 由于两种限制都存在,需要向右、向下、向左、向左、向左、向上移动,然后向右移动才能到达目标。如果情况是这样的,那么就没有有效的路径。
X X X X X X X X O O E S O O X X O O O X O如果需要的话,我正在使用C#开发这个棋盘游戏。
关于最大距离,以下是距离的范围。玩家将掷骰子并得到1-6的数字。如果玩家得到6,则再次掷骰子,如果他再次得到6,则继续掷骰子,直到他没有得到6。距离是结果数字加上玩家拾取的物品数量,理论上可以达到8,但通常为0-3或4。
另外,我刚刚收到新的规则,游戏规则改变为允许在同一路径上两次踏上相同的位置,我认为这极大地简化了流程,但我会保留这个问题,因为我认为它有很好的答案,可以帮助处于这种情况的人。