找到欧拉图的路径

时间:2013-11-10 11:46:35

标签: prolog

现在我正在学习Prolog。请帮我完成这项任务:如何获得在Prolog上创建Euler路径的顶点列表?程序应该适用于任何图形。

我有这个程序,但它仅适用于此图。

graph([a-b,a-c,a-d,b-c,c-d,c-e,d-e]).

edge(X,Y,[X-Y|_])
edge(X,Y,[Y-X|_]).
edge(X,Y,[_|T]) :- edge(X,Y,T).

erase(X,Y,[X-Y|T],T).
erase(X,Y,[Y-X|T],T). 
erase(X,Y,[H|T],[H|T2]) :- erase(X,Y,T,T2).

euler_route(X,Y,P,[X-Y]) :- edge(X,Y,P).
euler_route(X,Y,P,[X-Z|V]) :- edge(X,Z,P), erase(X,Z,P,P2), euler_route(Z,Y,P2,V).

euler_path(X,P,M) :-
    graph(P),
    euler_route(X,Y,P,M),
    X \= Y,
    length(P,L),
    length(M,L).

0 个答案:

没有答案