【发布时间】:2020-03-17 08:18:33
【问题描述】:
vertex(1).
vertex(2).
vertex(3).
vertex(4).
color(1).
color(2).
color(3).
edge(1,2).
edge(1,3).
edge(1,4).
edge(2,4).
edge(3,4).
edge(X,Y):-edge(Y,X).
getelement(1,[Z|_],Z).
getelement(X,[Z|Zs],M):-K is X-1,getelement(K,Zs,M).
check(Z):-edge(X,Y),getelement(X,Z,M),getelement(Y,Z,N),M=:=N,!,fail.
getcolor(1,red).
getcolor(2,blue).
getcolor(3,green).
colorit([A,B,C,D]):-color(A),color(B),color(C),color(D),write([A,B,C,D]),check([A,B,C,D]),write([A,B,C,D]).
这是我的代码。它没有被终止的问题。但是代码中的逻辑很清楚,如果你发现问题出在哪里,请帮我纠正。
输入:- colorit(Z)。
output:- [1, 1, 1, 1]
[1, 1, 1, 2]
[1, 1, 1, 3]
[1, 1, 2, 1]
[1, 1, 2, 2]
[1, 1, 2, 3]
[1, 1, 3, 1]
[1, 1, 3, 2]
[1, 1, 3, 3]
[1, 2, 1, 1]
[1, 2, 1, 2]
[1, 2, 1, 3]
[1, 2, 2, 1]
[1, 2, 2, 2]
[1, 2, 2, 3]
它到了这里,[1,2,2,3] 这是真正的解决方案,它在循环中并且不会通过返回 true 来终止。只需要进行一个小的更正。请帮帮我。
【问题讨论】:
标签: prolog graph-coloring