2016-01-05 11 views
3

У меня есть вопрос. У меня есть непрерывный неориентированный граф. Итак, мне нужен код в Prolog, который дает мне дополнительный граф.Complement Graph - пролог

, например, графа:

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

rot(X,Y):- edge(X,Y). 
rot(X,Y):- edge(Y,X). 

Пожалуйста, помогите :) спасибо.

ответ

0

Это должно работать для выдачи наземных запросов, а также для перечисления всех возможных краев.

complement(X, Y):- 
    ((var(X);var(Y)) -> setof(V, Z^rot(V,Z), Vertices);true), % If either vertex is not ground, compute the set of vertices 
    (ground(X) -> (once(rot(X, _)), VerticesX=[X]) ; VerticesX=Vertices), % Determine list of candidate X 
    (ground(Y) -> (once(rot(Y, _)), VerticesY=[Y]) ; VerticesY=Vertices), % and candidate Y 
    member(X, VerticesX), 
    member(Y, VerticesY), 
    X \= Y,  % Generate and test all 
    \+(rot(X,Y)). % possible candidates 
+0

Это работает :) Спасибо, очень много. –