python - prolog图遍历的访问节点中无法获取第一个节点
问题描述
我找到了一个基于 Prolog 的寻路算法。
这是 graph_traversal.P 文件的内容。
path(X,Y,P) :- path_aux(X,Y,[Y],P).
path_aux(X,Y,L,[X|L]) :- arc(X,Y).
path_aux(X,Y,L,P) :- arc(Z,Y), not(member(Z,L)), path_aux(X,Z,[Z|L],P).
我以对的形式提供了一个弧列表。当我使用以下行查询时
command = "path(" + start + "," + end+ ", P)"
for item in prolog.query(command):
print("item", item)
我在 item var 中得到类似的东西
开始:Middle0, [Middle1, Middle 2, ..., End]
我希望有这样的东西
[开始,中间0,中间1,中间2,...,结束]
我不知道 Prolog,但我必须解决这个问题。你能帮我解决这个问题吗?
解决方案
下面的行解决了这个问题。
path(A,B,Path) :-
travel(A,B,[A],Q),
reverse(Q,Path).
travel(A,B,P,[B|P]) :-
arc(A,B).
travel(A,B,Visited,Path) :-
arc(A,C),
C \== B,
\+member(C,Visited),
travel(C,B,[C|Visited],Path).
推荐阅读
- docker - 使用 sysVinit 启动 Docker 守护进程
- php - Wordpress/OptimizePress 在我的新登录表单中重定向 wp-login.php
- jquery - SVG 显示动画错误 - 虚线未正确显示
- javascript - reactjs Count down 组件在 IOS 设备上返回 NaN
- neural-network - 使用 Keras 将空间输入与标签相结合作为 CNN 的输入
- vue.js - 无法使用 Vuex 获取所有组件的数据
- java - 如何使用触摸监听器并仅在触摸按钮时播放声音?
- python - Unix 时间戳实际跟踪什么?
- mysql - 使用 ORDER BY id DESC 在 Max Date 值上左连接
- python - 如何使用 python3 configparser 读取具有多个键的配置文件?