/* SYS$USER2:[PROLOG.PRO]DFS.DAT;1 */ /* This program uses "depth first" search algorithm to search a */ /* graph. If two nodes, say a and b, in the graph have an edge */ /* connects them, then it is represented as edge(a, b). */ ?- list. search(X, X, T). search(X, Y, T) :- (edge(X, Z); edge(Z, X)), not(member(Z, T)), search(Z, Y, [Z|T]). member(X, [X|_]) :- !. member(X, [_|Y]) :- member(X, Y). edge(g,h). edge(g,d). edge(e,d). edge(h,f). edge(e,f). edge(a,e). edge(a,b). edge(b,f). edge(b,c). edge(f,c).