你好,我想了解更多关于clingo的知识,有这样的术语: 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]发布于 2019-02-19 07:44:09
第一条规则
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得到所有可能的值。
https://stackoverflow.com/questions/54751443
复制相似问题