python - 检查二维数组(如八皇后拼图)

标签 python arrays puzzle

我的问题与八皇后拼图非常相似。

我有二维数组 (N x N),例如,看起来像这样:

0,0,0,0,1 y
0,0,0,0,0 |
0,0,0,0,0 V
0,0,0,1,0
0,0,0,0,0
x->

我正在水平、垂直和对角线检查是否出现 1

\,0,|,0,/
0,\,|,/,0
-,-,1,-,-
0,/,|,\,0
/,0,|,0,\

我正在考虑在列表中只存储“1”的 (x,y) 位置

[[4,0],[3,3]]

并用数学方法解决它,检查“1”的每个位置与另一个 (x1,y1)<->(x2,y2),

如果 x1 == x2y1 == y2 我们有碰撞! 如果没有检查:

x2 == x1 + z;
y2 == y1 + z;
x2 == x1 - z;
y2 == y1 - z;

(???)

其中 z 是 +/- (x1+z in 0..N)和(y1+z in 0..N)......

我的问题是检查对角线碰撞,有更好的方法吗???

最佳答案

一种可能的解决方案:

def collision(x1, y1, x2, y2):
    return x1 == x2 or y1 == y2 or abs(x1-x2) == abs(y1-y2)

即如果两个点在同一水平行、同一垂直行或同一对角线上(垂直距离==水平距离),则存在碰撞。

关于python - 检查二维数组(如八皇后拼图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/384874/

相关文章:

algorithm - 如何以编程方式解决九九之谜?

PHP 5.3.3 难题,它打印什么以及为什么

c# - 将字符串拆分为数组,删除空格

javascript - 如何创建一个内部有数组的动态对象,使其不会被覆盖?

c - 如何在C中提取字符数组的一部分?

math - 如何测试随机性(例如 - 洗牌)

python - 如何总结列表的数量

python 入口小部件元组组合

python - python 需要具有基于时间和基于大小的文件轮换的 Concurrent_log_handler

python - 如何干净地退出多处理脚本?