什么是在LISP中存储棋盘的有效方法,例如解决8-queens拼图?
答案 0 :(得分:3)
对于8皇后问题,最有效的存储将是一个8字节的数组。 Clojure提供了byte-array
方法来简化创建这样一个数组的过程。将每个字节视为8位数组,并使用0表示空方块,1表示空格。
如果您打算使用多种类型的棋子,这将无效;另外,如果你想要可变的电路板尺寸,你应该考虑不同的方法。
答案 1 :(得分:1)
为了有效地解决八个皇后问题,您正在寻找一种有效的方式来表示部分解决方案。
如果我们将排名和文件0
编号为7
,并逐步完成排名,则向量rank -> file
执行此任务。
(set (range 8))
。(set (range 15))
。(set (range -7 8))
。 ...其中,每个广场[i j]
,
rank
为i
file
为j
rising-diagonal
为(+ i j)
falling-diagonal
为(- i j)
您可以像@WolfeFan建议的那样,使用位集来存储空闲或占用的插槽。但有关存储在这两种表示中都可以忽略不计。哪种表示更快,我不会在乎猜测。