首页 > 解决方案 > 如何告诉我的图形着色问题程序只分配一次颜色 1?

问题描述

基本上,我有一个图形着色程序,其中每个节点与另一个节点的边缘必须是不同的颜色。这是我的代码:

node(1..4).

edge(1,2).
edge(2,3).
edge(3,4).
edge(4,1).
edge(2,4).

color(1..3).

{ assign(N,C) : color(C) } = 1 :- node(N).

1 { assign(N,1) : color(1) } 1 :- node(N). %line in question

:- edge(N,M), assign(N,C), assign(M,C).

我如何告诉程序一次只分配颜色 1?标记为 %line 的行是给我带来问题的行。这是我尝试过的另一种无效的解决方案:

node(1..4).

edge(1,2).
edge(2,3).
edge(3,4).
edge(4,1).
edge(2,4).

color(1..3).

{ assign(N,C) : color(C) } = 1 :- node(N).

:- edge(N,M), assign(N,C), assign(M,C).

vtx(Node, Color) :- node(Node), color(Color).

1 { vtx(N, 1) : color(1) } 1 :- node(N).

#show vtx/2.

如果有人可以帮助我,将不胜感激。

标签: answer-set-programmingclingo

解决方案


在这个限制单一颜色使用一次的简单案例中,您可以编写单一约束

:- assign(N, 1), assign(M, 1), node(N), node(M), N!=M.

推荐阅读