#python #csv #uniform-cost-search
Вопрос:
Я строю такой график и использую библиотеку panda:
def build_graph(citiesandlist): graph = {} for l in citiesandlist: edges = l.split() n = edges[0] graph[n] = {} for i in range(1, len(edges) - 1, 2): graph[n][edges[i]] = int(edges[i 1]) return graph
И поиск по этому графику:
def uniform_cost_search(graph, start, end): queue = Q.PriorityQueue() queue.put((0, [start])) while not queue.empty(): n = queue.get() current = n[1][len(n[1]) - 1] if end in n[1]: print("Path found: " str(n[1]) ", Cost = " str(n[0])) break cost = n[0] for neighbor in graph[current]: temp = n[1][:] temp.append(neighbor) queue.put((cost graph[current][neighbor], temp))
Я могу запустить его в своем main.py:
citiesanddist = [] df = pd.read_csv('cities.csv', sep='t', header=None)[0] for i in range(1, len(df)): citiesanddist.append(str(df[i]).replace(",", " ")) city1 = input("city1: ") city2 = input("city2: ") graph = build_graph(citiesanddist) uniform_cost_search(graph, city1, city2)
Например, мой файл .csv выглядит примерно так:
- -Париж,Барселона,350 -Париж,Лион,70 -Лион,Антверпен,150
Проблема в том, что когда я ввел данные, такие как Париж, в Антверпен, алгоритм просто не увидит Антверпен на графике. Но это дает мне ответ, когда я сделал такой вклад, как Париж в Лион. То, что я пытаюсь сделать, — это заставить его работать в двух направлениях. Как я могу сделать так, чтобы это произошло?
Комментарии:
1. При построении графика вам необходимо вставить обратные узлы в то же время, что и прямые узлы.