入口和出口之间的所有可能路线



我需要帮助来解决迷宫路径。提前致谢

link(a,b).
link(b,c). 
link(c,d). 
link(f,c).
link(b,e). 
link(d,e). 
link(e,f). 

编写一个谓词,该谓词定义任意两个相邻点(例如 X 和 Y)之间的路由,基于它们与递归谓词之间存在链接的事实,该谓词涵盖了任何两个非相邻点(例如 X 和 Z)之间路由的更一般情况,方法是确定 X 与迷宫中的第三个点(例如 Y)和路线之间存在链接的事实在 Y 和 Z 之间。

两个特殊的房间 - 一个连接到"a"并称为"入口",另一个连接到"f"并称为"出口"。 添加一组事实以反映两个新房间。使用任务 1 中的谓词,编写一个谓词,用于查找入口和出口之间的所有可能路由,并创建已访问房间的列表。编写另一个谓词,在每次迭代结束时或在每次到达 Exit 时在交互式控制台中显示列表。编写显示预期结果和实际结果的测试计划。评估此解决方案并确定任何潜在问题以及可能导致其发生的情况。

此解决方案的问题是循环。如果我想链接(a,f),prolog说不。我的谓词有什么问题吗?

| ?- 链接(a,b).链接(b,c)。链接(c,d)。链接(f,c)。链接(b,e)。链接(d,e)。链接(e,f)。

route(X,Y):- link(X,Y).route(X,Y):- link(X,Z), route(Z,Y).是的

是的

是的

是的

是的

是的

是的

! ----------------------------------------!错误 20:未定义谓词!目标 : 路由(_31102,_31104) :- 链接(_31102,_31104)

中止| ?- 链接(a,f).不

| ?- route(X,Y).X = a ,Y = b ;

X = b ,Y = c ;

X = c ,Y = d ;

X = f ,Y = c ;

X = b ,Y = e ;

X = d ,Y = e ;

X = e ,Y = f ;

X = a ,Y = c ;

X = a ,Y = e ;

X = a ,Y = d

;

X = a ,Y = d

| ?- 链接(X,Z).X = a ,Z = b

| ?-| ?- 链接(X,Z).X = a ,Z = b ;

X = b ,Z = c ;

X = c ,Z = d ;

X = f ,Z = c ;

X = b ,Z = e ;

X = d ,Z = e ;

X = e ,Z = f

connected_to( A,B) :-
   closure0(link, A,B).

有关closure0/3的定义,请参阅此问题。

或者,要使用您的新名称:

route(A0,A) :-
    link(A0,A1),
    closure0(link, A1,A).

相关内容

最新更新