在python中存储8个皇后问题板的最佳方法是什么

时间:2019-02-27 11:18:05

标签: python pandas numpy

我正在尝试使用8 queen problemiterative-deepening search之类的搜索算法来解决A* search。 我给了一个棋盘,我应该找到最少的动作来获得一个不会有女王互相威胁的棋盘。 我不知道应该使用哪种数据结构或包将板存储在python中。

我将打印并保存访问的木板,我认为我应该使用最佳的数据结构来优化时间和空间。

我从pandas.DataFrame开始,因为我的数据是在csv中给出的。 然后,我注意到我应该检查相同的电路板,为了方便比较电路板,我切换到numpy.array()。另一种方法是使用简单的元组的python列表:

[(q1_x, q1_y), (q2_x, q2_y), ....(q8_x, q8_y)]

但是我不知道这是最好的解决方案。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

另一种方法是Numba:http://numba.pydata.org/。它允许对纯Python慢​​的天真for循环进行编码,但仍然可以获得良好的性能。

答案 1 :(得分:0)

在棋盘上存储皇后位置的一种快速而紧凑的方法是一个简单的数组(或列表),其中索引表示列号,而值代表皇后所在的行号。您可能要使用-1来标记列中是否没有女王/王后:

例如:queens = [0, 1, 2, 3, 4, 5, 6, 7]代表以下配置:

  0 1 2 3 4 5 6 7
0 Q
1   Q
2     Q
3       Q
4         Q
5           Q
6             Q
7               Q

您可以类似地使用8位整数的numpy数组