NetworkX图DFS遍历实现地铁站点路径查询返回None问题求助
问题排查解决方案
1. 首要问题:终点参数格式错误
你调用dfs方法时传入的终点参数为带额外双引号的"Victoria"(对应你代码里的'"Victoria"'),但图中存储的地铁站节点名称是无额外引号的Victoria,二者字符串匹配失败,导致DFS遍历完所有可达节点都找不到目标,最终返回None。
将调用代码修改为如下即可:
solution = dfs(G, 'Euston', 'Victoria')
2. 可能存在的第二个问题:有向图边缺失反向路径
你构建图时使用的是有向图nx.DiGraph(),且仅添加了从csv第一列站点指向第二列站点的单向边,但地铁线路是双向通行的,若数据中仅记录了单向的边顺序,就会出现部分路径无法通达的问题。
有两种修复方案可选:
- 方案1:将有向图替换为无向图,适合地铁这种双向通行的场景:
# 把原来的G = nx.DiGraph()替换为 G = nx.Graph() - 方案2:构建边时同时添加双向边:
edgelist = [] for _, x in data.iterrows(): edgelist.append((x[0],x[1],x[3])) edgelist.append((x[1],x[0],x[3])) G = nx.DiGraph() G.add_weighted_edges_from(edgelist)
3. 补充:路径提取逻辑
你当前实现的DFS返回的是最后匹配到的节点字典,需要额外回溯父节点才能得到预期的路径列表,补充以下代码即可输出路径:
def parse_path(result_node): path = [] current = result_node while current: path.append(current['label']) current = current['parent'] # 翻转得到从起点到终点的顺序 return path[::-1] # 调用示例 if solution: print(parse_path(solution)) else: print("未找到可达路径")
内容的提问来源于stack exchange,提问作者Mughees Asif
相关产品推荐
相关产品推荐

