下面是n皇后问题的合金模型(实际上,4皇后问题)。我想知道是否有更好的解决方案?注意在我的解决方案中,我使用next
和prev
反复消除对角线上的皇后;这似乎很klunky。n皇后的更好的合金模型?
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
哇!真棒!谢谢LoïcGammaitoni –
我的荣幸;-) –
嗨Loïc,我试着运行一个5 x 5棋盘的解决方案,但Alloy找不到任何实例。我尝试了Int的各种值,包括4个Int,5个Int和6个Int,但仍然没有实例。在选项菜单中,我设置了防止溢出:是的。有关Alloy为什么没有找到任何实例的任何想法? –