适用于wij≥0,给出了从vs到任意一个点vj的最短路。
Dijkstra算法是在1959年提出来的。目前公认,在所有的权wij ≥0时,这个算法是寻求最短路问题最好的算法。并且,这个算法实际上也给出了寻求从一个始定点vs到任意一个点vj的最短路。
2 案例1——贪心算法实现
==============
2.1 旅行商问题(TSP)
**旅行商问题(TravelingSalesmanProblem,TSP)**一个商品推销员要去若干个城市推销商品,该推销员从一个城市出发,需要遍历所有城市一次且只能一次,回到出发地。应如何选择行进路线,以使总的行程最短。
旅行商问题(TSP)即给定一组城市以及每对城市之间的距离,需要找到一条最短的路线,该路线只对每个城市进行一次访问并返回起点。
这里注意汉密尔顿活路(Hamiltonian Cycle)和TSP之间的区别。汉密尔顿回路问题是要找出是否存在一次游览每个城市一次的路线。在TSP问题中,我们是已知存在汉密尔顿回路(因为该图是完整的),并且实际上,存在许多此类回路,TSP问题在于找到最小权重的汉密尔顿回路。
目前解决TSP问题的方法有许多种,比如:贪心算法、动态规划算法、分支限界法;也有智能算法。本文先介绍贪心算法:
2.2 案例
数据 如下图,第一列城市名。第二列坐标x,第三列坐标y:
贪心算法思路:随便选择出发城市,然后每次选择要去的下一个城市时,都选择还没去的最近的城市。
2.3 Python实现
#第一步:导入相关库==========
import pandas as pd
import numpy as np
import math
import time
#第二步:读取数据===========
dataframe = pd.read_csv(“旅行商问题.csv”, sep=“,”, header=None)
v = dataframe.iloc[:, 1:3] #去除第一列12345678910,只保留x,y
print(‘读取数据:----------------------------’)
print(v)
#=第三步:计算城市之间的距离==
train_v= np.array(v)
train_d=train_v
dist = np.zeros((train_v.shape[0],train_d.shape[0])) #初始化距离 为10*10的全0矩阵
print(dist.shape) #(10,10)
#计算距离矩阵=
for i in range(train_v.shape[0]):
<