ASP Clingo - 将图形拆分为n个集团

时间:2016-12-16 19:34:12

标签: np answer-set-programming clingo

对于给定的图表,我需要使用最多n个派系来表示它。 我有这个任务的问题。 这类似于与给定图形相反的图形的n-着色(图形b与图形A相反,如果图形A中的边缘(a,b)不是边缘(a,b)不在图形B中)。我写了以下代码:

#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).

例如color(1)== color(2)!= color(3)== color(4)。 当我删除其中一个公式时,它也无法正常工作。

1 个答案:

答案 0 :(得分:2)

一种解决方案可能是先首先定义complementary graph,然后选择颜色:

#const n = 3.
% one color per node
1 { color(X,1..n) } 1 :- node(X).

% yield complementary graph, without reflexive edges.
cedge(X,Y):- not edge(X,Y) ; node(X) ; node(Y) ; X<Y.

% avoid models where two nodes linked in the complementary graph have the same color
:- cedge(X,Y) ; color(X,C) ; color(Y,C).