对于给定的图,我需要使用最多 n 个派系来表示它。我对这个任务有疑问。这类似于与给定图相反的图的 n 着色(当图 A 中的边(a,b)而不是图 B 中的边(a,b)时,图 b 与图 A 相对)。我写了以下代码:
#const n = 3.
{ color(X,1..n) } = 1 :- node(X).
:- not edge(X, Y), color(X,C), color(Y,C).
:- edge(X, Y), color(X,A), color(Y,B), A != B.
但它不适用于给定的测试:
node(1).
node(2).
node(3).
node(4).
edge(1, 2).
edge(2, 1).
edge(2, 3).
edge(3, 2).
edge(3, 4).
edge(4, 3).
例如颜色(1)==颜色(2)!=颜色(3)==颜色(4)。当我删除其中一个公式时,它也不起作用。