2

グラフを入力として受け取り、そのグラフが非循環かどうかを判断する述語 acyclic/1 を定義する必要があります。だから私の理解から

graph1(a,b).
graph1(b,c). 
graph1(c,a). 

いいえとを返します

graph2(a,b).
graph2(b,c). 

はいを返します

グラフ内の 2 つのノードが接続されているかどうかを判断する述語を作成しました。接続されている場合は、yes が返されます。

isConnected(X,Y) :- a(X,Z), isConnected(Z,Y).

これを使用して、グラフが非循環かどうかを判断する方法はありますか?

定義済みの述語を使用したくありません。

4

2 に答える 2

0

あなたの再帰述語 isConnected/2 は基本ケースを逃しています:

isConnected(X,Y) :- graph1(X,Y).

(もちろん、graph1 をチェックしていると仮定します)。

とにかく、Prolog は巡回グラフでループするため、isConnected/2 を使用することはできません。

于 2014-11-16T23:16:00.357 に答える