我遇到的问题如下(简化):
所以,考虑到游戏板上某个[i,j]
位置的游戏,我想知道:
a)所有可以移动的地方,以及它的速度
b)董事会中某个[k,l]
职位的路径
a)解决了,b)几乎是微不足道的。
目前我使用的算法如下,假设一种大小为n
的数组从0
转到n-1
的语言:
一个例子:
P
是片段,W
是墙,E
是空单元格,无需额外移动,X
是需要 1 额外移动的单元格越过。
X,E,X,X,X
X,X,X,X,X
W,E,E,E,W
W,E,X,E,W
E,P,P,P,P
第一个矩阵:
2,2,2,2,2
2,1,1,1,2
2,1,0,1,2
2,1,1,1,2
2,2,2,2,2
第二个矩阵:
1,0,1,inf,1
1,1,1,1,1
inf,0,0,0,inf
inf,0,1,0,inf
0,inf,inf,inf,inf
总和:
3,2,3,3,3
3,2,2,2,3
inf,1,0,1,inf
inf,1,2,1,inf
inf,inf,inf,inf,inf
由于[0,0]
不是2+1+1
,我更正了:
总和:
4,2,3,3,3
3,2,2,2,3
inf,1,0,1,inf
inf,1,2,1,inf
inf,inf,inf,inf,inf
由于[0,1]
不是2+1+0
,我更正了:
总和:
4,3,3,3,3
3,2,2,2,3
inf,1,0,1,inf
inf,1,2,1,inf
inf,inf,inf,inf,inf
由于[0,2]
不是2+1+1
,我更正了:
总和:
4,2,4,3,3
3,2,2,2,3
inf,1,0,1,inf
inf,1,2,1,inf
inf,inf,inf,inf,inf
哪一个是正确答案?
我想知道的是,如果这个问题有一个名字,我可以搜索它(无法找到任何东西),或者是否有人可以告诉我如何解决 a)这一点。
请注意,我想要最佳解决方案,因此我选择了动态编程算法。随机助行器可能会更好吗? AFAIK,这个解决方案没有失败(但是),但我没有证据证明它是正确的,我想确定它有效。
答案 0 :(得分:1)
A-star是一种标准算法,用于确定最短路径在2d板上给出障碍物以及每平方移动成本。您还可以使用它来测试特定移动是否有效,但是为了实际生成所有有效移动,我只需从起始位置开始,在每个方向上移动一个方形标记,哪个方块有效,然后从每个新方向重复确保不再访问同一个广场的地方。它将是一个递归算法,在每次调用时最多调用自己4次,并有效地生成有效的移动。如果有一些限制,例如你可以一次性移动多少个方格而且费用不同,只需通过每个方格你可以走多远的总计。