【发布时间】:2016-07-18 06:45:00
【问题描述】:
我一直在研究 Haskell 上的 n 个皇后问题,并且我已经能够解决大部分问题。
queens :: Int -> [[Int]]
queens 0 = [[]]
queens n = [ x : y | y <- queens (n-1), x <- [1..8], safe x y 1]
where
safe x [] n = True
safe x (y:ys) n = and [ x /= y , x /= y + n , x /= y - n , safe x ys (n+1)]
drawQueens :: [Int] -> String
drawQueens [] = ""
drawQueens x = "1 2 3 4 5 6 7 8" ++ ['\n'] ++ concatMap showRow x ++ ['\n']
where
size = length x
spaces = replicate size '_' ++ ""
showRow n = take (n - 1) spaces ++ "D" ++ take (size - n) spaces ++ ['\n']
我的第二个函数 drawQueens 应该理想地将皇后问题的一种解决方案转换为 ASCII 图形(见下图)。我的问题/疑问是:
- 如何获得输出 [[Int]] 的 Queens 函数以“给”一个 [Int] 给 drawQueens 函数?
2.为什么编译器不解释['\n']?如何修改我的代码以获得所需的输出?
这最初是学期中的家庭作业问题,但我现在只是为自己做。
This is what my output of drawQueens looks like currently
感谢您的所有帮助。
【问题讨论】: