我的问题主要与算法有关,而不是特定于特定编程语言
假设我们有一个由列表列表表示的图形,其中每个内部列表代表两个节点和一个编号的边缘,Is可以实现一个递归BFS(广度优先搜索)函数仅以下12项功能?我们的bfs递归函数应该有5个参数:
图表示例:
e1
/ \
e2 e3
| \ |
e5 e4
((e1 1 e2) (e1 2 e3) (e2 3 e4) (e3 4 e4) (e2 5 e5))
这是功能:
create-gr ; creates an empty list
is-graph-el: ; check if a list is of the format above (for graph elements)
el-contains-n ; check if a graph element contains an atom representing a node (e.g., a)
is-mem ; check if a list contains an atom
push-unq ; gets a list and an atom and inserts it at the end of the list if it's not already there
remove-vis ; gets a graph (list of list), removing all the graph elements containing the specified atom
remove-all-vis ; same as above, but we can pass a list of atoms to be removed
del-from-list ; remove all occurrences of an atom from a list
del-all-from-list ; same as above, but we can pass a list of atoms to be removed
first-el ; return the first element of a node (e.g., for [a, 1, b], return a
third-el ; return third element (similar to above)
convert-to-els ; receives a graph and returns a flat list of all first and third elements listed in order
这就是我实现这个功能的方式:
我的问题是我已经定义了两个函数(一个用于查找路径,另一个用于将这些路径的目标节点推送到搜索队列),这些函数不在上面的函数列表中。
我想知道是否可以使用 ONLY 这些功能来进行BFS?
真心感谢任何形式的帮助......