【发布时间】:2017-04-05 16:08:08
【问题描述】:
下面是 n-queens 问题(实际上是 4-queens 问题)的合金模型。我想知道是否有更好的解决方案?请注意,在我的解决方案中,我反复使用next 和prev 来消除对角线上的皇后;这似乎很笨拙。
open util/ordering[Row]
sig Row {}
one sig Column0 {
row: Row
}
one sig Column1 {
row: Row
}
one sig Column2 {
row: Row
}
one sig Column3 {
row: Row
}
fact {
#Row = 4
}
fact {
Column0.row != Column1.row
Column0.row != Column2.row
Column0.row != Column3.row
Column1.row != next.(Column0.row)
Column2.row != next.next.(Column0.row)
Column3.row != next.next.next.(Column0.row)
Column1.row != prev.(Column0.row)
Column2.row != prev.prev.(Column0.row)
Column3.row != prev.prev.(Column0.row)
Column1.row != Column2.row
Column1.row != Column3.row
Column2.row != next.(Column1.row)
Column3.row != next.next.(Column1.row)
Column2.row != prev.(Column1.row)
Column3.row != prev.prev.(Column1.row)
Column2.row != Column3.row
Column3.row != next.(Column2.row)
Column3.row != prev.(Column2.row)
}
pred Show {}
run Show for 4
【问题讨论】:
标签: alloy