Julia编程:从皇后问题到复合数据类型
1. 皇后问题
皇后问题最早由Max Bezzel在1848年提出,1850年Franz Nauck发表了首个解决方案。1972年,Edsger Dijkstra用该问题展示了结构化编程的强大,并详细描述了深度优先回溯算法。
问题最初是在棋盘上放置8个皇后,使任意两个皇后不能相互攻击,后来扩展到在N×N的棋盘上放置N个皇后。对于N = 1,问题的解很简单;N = 2或3时,无解;对于标准的8×8棋盘,在约44亿种随机放置皇后的组合中,有92种解,因此穷举法不可行。
以下是Julia实现的代码:
struct Queen
x::Integer
y::Integer
end
qhorz(qa, qb) = qa.x == qb.x;
qvert(qa, qb) = qa.y == qb.y;
qdiag(qa, qb) = abs(qa.x - qb.x) == abs(qa.y - qb.y);
qhvd(qa, qb) = qhorz(qa, qb)||qvert(qa, qb)||qdiag(qa, qb);
qany(testq, qs) = any(q -> qhvd(testq, q), qs);
function qsolve(nsqsx, nsqsy, nqs, presqs = ())
nqs == 0 && return presqs
for xsq in 1:nsqsx
for ysq in 1:nsqsy
testq = Queen(xsq, ys
Julia编程:从皇后问题到复合数据类型
超级会员免费看
订阅专栏 解锁全文
35

被折叠的 条评论
为什么被折叠?



