我正在玩一个游戏,进入到下一个级别,我们必须在每个级别之前击败它。每个级别对应一个特定的字母。
我已将其表示为图遍历问题,但我试图在图中查找没有起点或终点的所有路径。
我的图形表示为字典,键为字符串,值为字符串列表。
{
'A2': ['A1', 'B'],
'A1': [],
'B': [],
'C': ['A2'],
}
要进入A2级,我们必须完成A1和B。
例如,示例路径为A1,B,A2,C。 另一个路径可能是B,A1,A2,C。
深度优先搜索或广度优先搜索的实现需要一个起始节点。我想一个好的起始节点应该是任何值为空的键:在这种情况下,为A1和B,但是我不确定如何用两个起始节点实现dfs或bfs。
我一直在调整查找路径的实现,但这仅适用于开始级别和结束级别。
def find_path(graph, start, end, path=[]):
path = path + [start]
if start == end:
return path
if start not in graph:
return None
for node in graph[start]:
if node not in path:
newpath = find_path(graph, node, end, path)
if newpath: return newpath
return None
print(find_path(course_dict, 'A1', 'PC'))
但是我的回答没有。
答案 0 :(得分:0)
好的,有两个问题。 首先,您尝试构建一个递归算法,但仍然使用for循环。令人困惑,您可以在没有for循环的情况下执行此操作。在递归算法中使用循环并没有错,但是如果您更改数据结构,则不需要。
第二件事是您的词典有误。我假设字典的每个键都是凝视节点,每个值都是可能的末端节点。这就是您的算法当前的工作方式。在这种情况下,将不提供起始A1
的结束节点。因此,您将获得None输出。
最大的问题是您使用了错误的算法。该算法找到了从起点到终点的方法。但是,您要确保起始节点和结束节点之间的每个节点至少都被访问过一次。因此,您可以更改算法(这很容易)或数据结构(这将导致很多变化)。