打印Eulerian图形路径

时间:2014-11-30 22:52:05

标签: prolog

我对Prolog来说是全新的,但我必须这样做才能完成作业。在该条目处给出了无向连贯图。在Prolog中编写一个程序,打印该图的euler圆。谢谢你的回答。例如,我有这个优势:

edge(a,b).
edge(b,e).
edge(a,c).
edge(c,d).
edge(e,d).

1 个答案:

答案 0 :(得分:2)

这是Eulerian path;不一定是一个圆圈。

eulerpath(E, Cs) :-
   setof(A-B, call(E, A,B), ABs),
   edges_path(ABs, Cs).

edges_path([], [_]).
edges_path(ABs0, [X,Y|Xs]) :-
    select(A-B,ABs0,ABs),
    ( A = X, B = Y ; B = X, A = Y ),
    edges_path(ABs, [Y|Xs]).


?-  eulerpath(edge, Cs).
Cs = [a, b, e, d, c, a] ;
Cs = [b, a, c, d, e, b] ;
Cs = [a, c, d, e, b, a] ;
Cs = [c, a, b, e, d, c] ;
Cs = [b, e, d, c, a, b] ;
Cs = [e, b, a, c, d, e] ;
Cs = [c, d, e, b, a, c] ;
Cs = [d, c, a, b, e, d] ;
Cs = [e, d, c, a, b, e] ;
Cs = [d, e, b, a, c, d] ;
false.