#python #networkx #dijkstra
Вопрос:
Я хотел использовать gragh,чтобы получить кратчайший путь, но networkx подсказал мне » Ошибка значения: («Найдены противоречивые пути:», «отрицательные веса?»)».После этого я проверил все грани грэга,все они были больше нуля. В конце концов, я использую nx.is_negatively_weighted(G, вес= «вес»), который возвращает значение False.однако Дейкстра также возвращается («Найдены противоречивые пути:», » отрицательные веса?»), когда я пытался найти кратчайший путь. ниже приведен мой код:
def Get_Shortest_Car_To_Cus_Path( # 获得车辆到乘客的最短路径 car_names, # 符合条件的车辆编号们 (就算单个pd.data对象也没事) cus_name, # 目标乘客 car_updata: bool = False, # 是否更新节点的车辆信息 cus_updata: bool = False, # 是否更新节点的乘客信息 weight: str = 'weight', # 计算最短路径的权重名称,有三类(weight, shape_len, wgs84_length) **kwargs ): G = kwargs['G'] # G = G.copy() # 创建副本,从副本导出 if car_updata: # 更新节点的车辆信息 G = Updata_G_Map_Car( car_names=car_names, **kwargs) # 添加乘客的O点 if cus_updata: G = Updata_G_Map_cus( cus_names=[cus_name], **kwargs ) print(nx.is_negatively_weighted(G, weight='weight')) if len(car_names) != 1: length, path = nx.multi_source_dijkstra(G=G, sources=set(car_names), target=cus_name '_出发地', weight=weight) else: path = nx.dijkstra_path(G=G, source=str(car_names), target=cus_name '_出发地', weight=weight) length = path_lenght(G=G, path=path, weight=weight) path = get_pure_path(old_path=path) return length, path
Каждый раз,когда я пытаюсь найти кратчайший путь, nx.is_negatively_weighted(G,вес= «вес») говорит мне, что граф не отрицательный, но nx.multi_source_dijkstra() говорит мне, что график имеет отрицательные веса. Почему это произошло?
Комментарии:
1. Что произойдет, если вы измените вызов
nx.dijkstra_path(...)
на «иметь аргументweight='weight'
«, а неweight=weight
«нет»?