Как мне сказать, чтобы моя программа задачи по окрашиванию графиков назначала цвет 1 только один раз? - PullRequest
1 голос
/ 18 октября 2019

По сути, у меня есть программа раскраски графа, в которой каждый узел с ребром другого узла должен быть разных цветов. Вот мой код:

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.

Если бы кто-нибудь мог мне помочь, это было бы очень признательно.

1 Ответ

1 голос
/ 18 октября 2019

В этом простом случае ограничения одного цвета для однократного использования вы можете записать одно ограничение

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