从理论到实现,需要数据、需要代码、需要运气
以node / link文件表征的道路网络-----dijkstra算法yyds-----基于南京公路公开数据做路径规划(上)
基本讲清楚了最短路算法的基本原理
下面主要做几件事:
①把node和link文件导入
②把有效字段输入算法
③输出我想要的结果
核心算法如下:
import pandas as pd
import numpy as np
import seaborn as sns
sns.set(style="ticks", color_codes=True)
def dijkstra(start, adjacency_matrix):
passed = [start]
nopass = [x for x in range(len(adjacency_matrix)) if x != start]
dis = adjacency_matrix[start]
while len(nopass):
idx = nopass[0]
for i in nopass:
if dis[i] < dis[idx]:
idx = i
nopass.remove(idx)
passed.append(idx)
for i in nopass:
if dis[idx] + adjacency_matrix[idx][i] < dis[i]:
dis[i] = dis[idx] + adjacency_matrix[idx][i]
route_list_index[i].append(idx)
return dis
下面就是些导入数据之类的:
class ReadData:
def __init__(self, node, link): # 类属性
self.node = 'node.csv'
self.link = 'link.csv'
def read_node(self