我对Prolog来说是全新的,但我必须这样做才能完成作业。在该条目处给出了无向连贯图。在Prolog中编写一个程序,打印该图的euler圆。谢谢你的回答。例如,我有这个优势:
edge(a,b).
edge(b,e).
edge(a,c).
edge(c,d).
edge(e,d).
答案 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.