假设我在下面有一个二维数组:
[[ 0 0 0 0 0 0 ]
[ 0 0 0 0 0 0 ]
[ 0 0 0 0 0 0 ]
[ 0 0 0 0 0 2 ]
[ 0 1 0 0 0 0 ]
[ 0 0 0 0 0 0 ]]
我想知道从“1”(索引 4,1)到“2”(索引 3,5)的方向。假设方向只有上、下、左、右。因此没有对角线运动。
获取方向的一种方法:
"right" if destination.x > start.x else "left" if target.x < start.x else None
"down" if destination.y > start.y else "up" if destination.y < start.y else None
因此,对于此示例,我们可以通过“向上”或“向右”前往“2”或目的地。那当然只是一步,一旦你移动了,就可以执行同样的逻辑来向目的地靠拢。
这种逻辑的问题在于它没有考虑包装。按照这个逻辑,需要 5 个步骤才能到达目的地。由于有包裹,实际上向左或向上走的路更短,只需 3 步即可到达目的地。
正在考虑生成另一个数组,其中开始将是数组的中间并执行相同的逻辑。问题是数组是否是偶数(比如这是 6x6,需要填充以获得中间值。例如:
[[ 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0]
[ 0 2 0 0 0 0 0]
[ 0 0 0 1 0 0 0]
[ 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0]]
这里的数组现在是 7x7。我相信有一种更简单的方法可以在没有这个额外步骤的情况下获得答案,但想不出来。
慕沐林林
繁花不似锦
相关分类