此功能不会终止!我正在尝试为八个皇后在八乘八棋盘上生成所有可能的安全组合。我不确定出了什么问题。我的代码如下。棋盘表示为 [x1, x2...x8],其中值 xi 是列,该值的索引是行。
safeH 函数应该创建八个数字的所有组合而不重复,例如 [1,4,3,5,8,6,7,2],[6,4,8,2,5,1,3,7]等等...
safeD 函数会将第一个元素与所有后继元素进行比较,以确保没有皇后放置在该皇后(该元素)的对角线上,依此类推..
queens = [ [x1,x2,x3,x4,x5,x6,x7,x8] | x1 <- [1..8], x2 <- [1..8]
, x3 <- [1..8], x4 <- [1..8]
, x5 <- [1..8], x6 <- [1..8]
, x7 <- [1..8], x8 <- [1..8]
, safeH [x2,x3,x4,x5,x6,x7,x8] x1
, safeD [x2,x3,x4,x5,x6,x7,x8] x1
[x1,x2,x3,x4,x5,x6,x7,x8] 1 ]
safeH l e =
if elem e l then False
else if length (l)/=0 then safeH(tail l)(head l)
else True
safeD l e xs n =
if last xs /= e then
if length l /= 0 then
if head l + n == e || head l - n == e then False
else safeD (tail l) e xs (n + 1)
else safeD (tail xs) (head xs) xs 1
else True