algorithm - 确定二维网格上的所有相邻空间

标签 algorithm python-2.7 adjacency-list

我似乎找不到解决这个问题的好方法。

假设我在 2D 网格上有一个点描述角色(棋盘游戏)的位置:

                                 [n,m]

现在,在每个回合中,我都可以根据骰子的掷骰(1,2,3...)来移动角色,并且我想找到角色移动的所有可能方式。

移动角色一次意味着仅改变nm,其中对角线移动算作2次移动(即[n+1, m] 移动一次,[n+1,m+1] 移动两次)。

例如,如果我掷出 2,那么所有可能的移动是:

                                 [n,m+2]
                        [n-1,m+1][n,m+1][n+1,m+1]
                    [n-2,m][n-1,m][n,m][n+1,m][n+2,m]
                        [n-1,m-1][n,m-1][n+1,m-1]
                                 [n,m-2]

我似乎无法找到一个明确的算法。

到目前为止,我得到的是 Daniel Lew 的另一个建议。

position = [3,2] #position
n = 2 #number of moves allowed
for i in range(position[0]-n,position[0]+n):
    for j in range(position[1]-n,position[1]+n):
        if abs(position[0]-i) + abs(position[1]-j) <= n:
                print i,j,'works\n'

但是,它错过了 [n][m+2],[n+2,m] (或者我写的方式错过了它)。

对于简洁的答案或修复有什么建议吗?

最佳答案

假设骰子显示 p。 现在您想知道距离您当前位置有多少个点,曼哈顿距离为 p。 现在你能做的就是简单地这样做。

伪代码:

for i=0..p
   if( x+i or x-i is valid and y+p-i or y-p+i is valid )
      then move in (x+i,y+p-i) or/and (x-i,y-p+i) or/and (x-i,y+p-i) or/and (x-i,y+-i)

关于algorithm - 确定二维网格上的所有相邻空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41196989/

相关文章:

c++ - 我怎样才能知道 13 号星期五在一年中出现了多少次?

algorithm - 盒堆叠变体-动态规划

algorithm - 用于在多个条件下做出决策的数据结构

java - 访问二维数组中的索引时返回空指针异常

python - 从Python中的矩阵创建邻接列表图

algorithm - minmax_element 的复杂性

python - 如何知道我是否在装饰一个方法

Python 记录到标准输出和 StringIO

python - 带有 Python 2.7、PIP 和标准库的 Docker 镜像

python - 将文件元素读入邻接表