Graph Prolog编程中的图
我是Prolog编程新手,我试图检查一个图是否有欧拉回路。我有以下图形表示和代码:Graph Prolog编程中的图,graph,prolog,Graph,Prolog,我是Prolog编程新手,我试图检查一个图是否有欧拉回路。我有以下图形表示和代码: find_e_circuit(G, Circuit) :- member(V-_Edges, G), find_e_circuit(G, V, [], RevCircuit), reverse(RevCircuit, Circuit), countEdges(G, S), length(RevCircuit,S)
find_e_circuit(G, Circuit) :-
member(V-_Edges, G),
find_e_circuit(G, V, [], RevCircuit),
reverse(RevCircuit, Circuit),
countEdges(G, S),
length(RevCircuit,S)
writeln("Found an eulerian circuit: ").
find_e_circuit(G,V,SeenVs,Circuit) :-
( memberchk(V,SeenVs)
-> Circuit=[V|SeenVs]
; member(V-Edges,G),
member(Vedge,Edges),
find_e_circuit(G,Vedge,[V|SeenVs],Circuit)
).
?- find_e_circuit([1-[2],2-[3],3-[4],4-[1]],Circuit)
上面的图可以使用该图,但如果我尝试使用[1-[2],2-[3],3-[4],4-[1],5-[4]]它仍然输出(电路=[5,4,1,2,3,4]),但它不应该输出。CountEdge统计图形中的边数。有人能告诉我如何更正以上内容,使其可以很好地打印出来吗?如何检查每个边是否只访问一次?提前感谢。
我如何检查每个边缘是否只访问了一次?
您可以在单独的数据结构中保存一个记录。知道如何做吗?由于我刚刚开始编写Prolog,所以很难做到这一点,实际上也很难让它正常工作,因为我不知道Prolog中有多少东西是认真的。只要开始阅读每一个问题,你们就会发现数百个类似的问题和答案。