【发布时间】:2020-01-17 06:19:58
【问题描述】:
我有一个用 3 种颜色为图形着色的程序,相邻节点需要有不同的颜色。
我的问题是,它仅适用于有向图,当我使用无向图时,它会因堆栈溢出而失败。我知道有一些错误,你能帮忙吗 我让它适用于无向图?
最后那个findall/3也有问题。我需要将其更改为查找所有节点,不仅是带有edge(V,_) 的节点,但我不知道该怎么做。
我是初学者,我需要简单的解决方案。谢谢。
edge(1,2).
edge(2,3).
edge(2,4).
edge(3,4).
%for making the non-oriented graph I tried to use nonedge(X, Y) :- edge(X, Y).
% nonedge(X, Y) :- edge(Y, X).
color(blue).
color(red).
color(green).
coloring([V-C]) :-
color(C),
\+ edge(V,_).
coloring([V-C,V1-C1|Coloring]) :-
color(C),
edge(V, V1),
V \== V1,
coloring([V1-C1|Coloring]),
C1 \== C.
colors(X) :-
coloring(X),
findall(V, edge(V,_), List),
length(List, Len),
length(X, Len).
【问题讨论】:
-
我怀疑这不是有向图的工作版本?你能添加一个预期输入输出的例子吗?
-
它正在工作,但不是 100% 正确。没有那个
oh(X, Y) :- h(X, Y). oh(X, Y) :- h(Y, X).我有有向图,当我点击 `?- colors(X).` 我得到X = [1-blue, 2-red, 3-blue, 4-red]这是好的。我想让它也适用于两边的边缘,我需要更正findall以显示所有节点,而不仅仅是带有边缘(V,_)的节点 -
那么您的
edge谓词在哪里?应该改成oh还是少了点? -
抱歉,出现错误。现在更正了。这是一个工作版本。
-
哦,这是来自stackoverflow.com/questions/10713690/…的复制粘贴
标签: prolog graph-theory graph-coloring