dfs([Node | OPEN], _ , Goal) :-
Node==Goal, !,
write('yes! goal reached.... ' - Goal), nl.
dfs([Node | OPEN],CLOSED, Goal) :-
findall( Next,
(
arc(Node, Next), Next
not(member(Next, OPEN)), not(member(Next, CLOSED))
),
NewNode
),
append(NewNode, OPEN, NewOPEN),
write('OPEN = frontier of search...'), write(NewOPEN),nl,
write('CLOSED = nodes already visited...'), write([Node | CLOSED]),nl,nl,
dfs(NewOPEN, [Node | CLOSED], Goal). % recurse with new data
弧(A,B)。 弧(A,C)。 弧(B,d)。 弧(B,E)。 弧(C,F)。 弧(F,G)。 弧(E,Z)。 弧(d,e)所示。 弧(Z,G)。 弧(Z,d)。
答案 0 :(得分:0)
这样的事情:
dfs(Node, Goal) :- !.
dfs(Node, Goal) :-
arc(Node, Next),
score(Node, Next, S),
not (score(Node, Next, S1), S1 > S), write(Next),
dfs(Next, Goal).
然后你需要为每个弧定义一个分数,例如得分(a,b,3)。