当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《检查二维数组(如八个皇后拼图)》经验,为你挑选了1个好方法。

我的问题非常类似于八个女王之谜.

我有二维数组(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]]

并用数学方法求解,用另一个(x1,y1)< - >(x2,y2)检查"1"的每个位置,

如果x1 == x2y1 == y2 we have a collision!不检查:

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

(???)

其中z是+/-那个 ( x1+z in 0..N ) and ( y1+z in 0..N ) .......

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



1> dF...:

一种可能的方案:

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

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

推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有