以下合金代码是针对8Queens问题的
我不知道为什么plus运算符和减号运算符不能正常工作
所以在执行后,同一对角线上有皇后
此外,当在2#
之间使用加号和减号运算符时,我面临这个错误
例如:
#q1.row +#q2.col-#q1.col!=#q2.row
感谢您的回复 最好的问候
这是8Queens代码:
sig Queens{
row:Int,
col:Int
}
{row>=0 and row <#Queens and col>=0 and col<#Queens}
pred nothreat(q1,q2 : Queens) {
q1.row != q2.row
and q1.col != q2.col
and q1.row+q2.col-q1.col != q2.row
and q1.row-q2.col+q1.col != q2.row
}
pred valid {
all q1,q2 : Queens | q1 != q2 => nothreat[q1, q2]
}
fact card {#Queens =8}
run valid for 8 Queens, 8 Int
答案 0 :(得分:2)
改为使用plus
和minus
函数(例如q1.row.plus[q2.col].minus[q1.col]
),因为+
始终被视为集合并且-
作为集合差异