我需要一个算法,它会给我一条从起始节点到结束节点的路径,但路径必须有一个确切数量的节点,否则路径查找应该失败 .
为了扩展,我有一个瓷砖网格 . 移动只能是紧邻的上,下,左或右平铺(意思是没有对角线移动) . 瓦片在路径中可以使用和不可以使用的规则有很多,但大多数情况下可以归结为简单的布尔来判断瓦片是否可以使用(这可以在开始算法之前计算出来)但是,给我带来麻烦的是,我有一条路径必须具有的距离,这意味着,从一个瓷砖到相邻瓷砖的每一次移动都是一个距离,整个路径应该有一个指定的距离,不多也不少 . 此外,一旦瓷砖被踩到(但算法开始时所有瓷砖都可用),它不能再次踩到,有点像玩老蛇游戏你我要注意不要吃自己 .
我看过Dijkstra / A *并且我用google搜索算法进行寻路,但据我所知,所有这些算法都集中在最短的路径上,这对我没什么好处 . 只要遵循上述规则,我不关心它是哪条路径 .
我错过了什么,这样的算法和算法是否已经存在,或者是否有一种简单的方法来修改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,maaaybe 4 .
另一方面,我刚收到新订单,游戏规则改为允许在相同的路径上两次踩到同一个位置,我相信这个过程很简单,但是我会把这个问题保留为我认为它有很好的答案,可以帮助那些情况下的人 .