运筹学——图论与最短距离(Python实现)(2),2024年最新Python高级面试framework

适用于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]):

<
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值