1

您好,我正在尝试了解有关 cligo 的更多信息,有以下术语:v(1,2).v(2,1).v(3,4).v(4,3),表示第一个元素不能在第二个元素的同一行,第二个元素不能与第一个元素相同,ecc ..想写一些规则来找到一个矩阵2x2,其中元素(I,J,N)根据该限制放置。提前致谢

v(1,2).v(2,1).v(3,4).v(4,3)
rows(1..2).
col(1..2).
1{m(I,J,N) : v(N)}1 :- rows(I), col(J).  
1{m(I,J,N) : rows(I), col(J)}1 :- v(N).
...code...
output 
[1,1,1][1,2,4][2,1,2][2,2,3]
[1,1,4][1,2,1][2,1,2][2,2,3]
[1,1,1][1,2,4][2,1,3][2,2,2]
[1,1,4][1,2,1][2,1,3][2,2,2]
4

1 回答 1

0

第一条规则

1{m(I,J,N) : v(N)}1 :- rows(I), col(J).

将一个 v(N) 放入矩阵的每个位置,但您没有定义 v(N),您定义了 v(N,M)。

第二条规则

1{m(I,J,N) : rows(I), col(J)}1 :- v(N).

将每个 v(N) 恰好放在一行和一列中。

我建议你用 w(X) 替换 v(X) 并定义

w(N) :- v(N,_).
w(N) :- v(_,N).

这意味着您将所有可能的值从 v(X,Y) 转换为 w。

于 2019-02-19T07:44:09.960 回答