import MapCreater
import OneRoadMapCreater
import copy
import random
import operator
import InputCtrl
def MinTransferDijkstra(StartSite, EndSite):
if StartSite == EndSite:
return 0, [], []
if StartSite not in OneRoadMapCreater.SiteDic:
print("起始点不存在")
return -1, [], []
if EndSite not in OneRoadMapCreater.SiteDic:
print("终止点不存在")
return -1, [], []
StartSiteIndex = OneRoadMapCreater.SiteDic[StartSite]
EndSiteIndex = OneRoadMapCreater.SiteDic[EndSite]
DijkstraArr = copy.deepcopy(OneRoadMapCreater.HeadSiteArr)
minlen = float("inf")
BusIdMaps = []
RouteMaps = []
is_continue = 10
while is_continue:
RouteMap = [[float("inf") for col in range(500)] for row in range(500)] # 存储最短路径,之后倒序查找可以回溯到起始点
valuequeue = [] #权值队列,存储pair(index, value)
BusIdMap = [[[] for col in range(500)] for row in range(500)] #保存车站路径,之后倒序查找可以回溯到起始点
for i, site in enumerate(DijkstraArr[StartSiteIndex]):
if site < 10000:
pair = [i, site, StartSiteIndex]
valuequeue.append(pair)
DijkstraArr[i][StartSiteIndex] = float("inf") #无向边,从正向走过去就不要走回来了
else:
continue #如果不连通(权值是无穷大)则跳过
#初步找到了所有和StartSite相连的点,建立邻接路径矩阵,每次保存最短路径,之后可以倒序输出。
while(len(valuequeue) > 0):#非空,先将队列排序,按照value递增排序,每次弹出队列头。
sorted(valuequeue, key=lambda t: t[1]) #按照value对valuequeue中的pair进行排序
#valuequeue中最小值可能不止一个,随机返回一个最小值
minline = []
min_in_minline = valuequeue[0][1] #valuequeue头上的一定是最小的
for tmin in valuequeue:
if tmin[1] == min_in_minline:
minline.append(tmin)
else:
break
random.shuffle(minline)
[tindex, tvalue, tparent] = valuequeue.pop(valuequeue.index(minline.pop(0))) #释放队列头,即权值最小的节点
RouteMap[tparent][tindex] = tvalue #这一条路径已经确定,记录下来
BusIdMap[tparent][tindex].extend(OneRoadMapCreater.BusIdArr[tparent][tindex]) #保存路线站点
#DijkstraArr[tparent][tindex] = float("inf")
if tindex == EndSiteIndex: #这样就找到了
#return tvalue, RouteMap, BusIdMap
if minlen >= tvalue:
minlen = tvalue
# for eachroute in RouteMaps:
# if doublelist_equal(eachroute, RouteMap):
# break
# else:
RouteMaps.append(RouteMap)
BusIdMaps.append(BusIdMap)
is_continue -= 1
break
else:
is_continue = 0
return minlen, RouteMaps, BusIdMaps
else: #这样就还没找到
temparr = [] #暂时保存新扩展的节点
for i, tsite in enumerate(DijkstraArr[tindex]):
if tsite < 10000:
tpair = [i, tsite + tvalue, tindex] #因为是在tindex对应的节点上扩展的,所以权值应该是tindex的权值+本身的权值
temparr.append(tpair)
DijkstraArr[i][tindex] = float("inf")
while(len(temparr) > 0): #用新扩展的节点更新dijkstra邻接矩阵路径代价
[newindex, newvalue, newparent] = temparr.pop()
for one in valuequeue:
if newindex == one[0]: #如果扩展到了已经存在的节点,就更新值
if one[1] > newvalue:
one[1] = newvalue
break
else: #如果是新扩展的,就添加进入队列中
valuequeue.append([newindex, newvalue, newparent])
else:
#print("没有路径")
print(minlen)
return minlen, RouteMaps, BusIdMaps
return minlen, RouteMaps, BusIdMaps
def MinDistanceDijkstra(StartSite, EndSite):
if StartSite == EndSite:
return 0, [], []
if StartSite not in MapCreater.SiteDic:
print("起始点不存在")
return -1, [], []
if EndSite not in MapCreater.SiteDic:
print("终止点不存在")
return -2, [], []
StartSiteIndex = MapCreater.SiteDic[StartSite]
EndSiteIndex = MapCreater.SiteDic[EndSite]
DijkstraArr = copy.deepcopy(MapCreater.HeadSiteArr)
minlen = float("inf")
BusIdMaps = []
RouteMaps = []
is_continue = 10
while is_continue:
RouteMap = [[float("inf") for col in range(500)] for row in range(500)] # 存储最短路径,之后倒序查找可以回溯到起始点
valuequeue = [] #权值队列,存储pair(index, value)
BusIdMap = [[[] for col in range(500)] for row in range(500)] #保存车站路径,之后倒序查找可以回溯到起始点
for i, site in enumerate(DijkstraArr[StartSiteIndex]):
if site < 10000:
pair = [i, site, StartSiteIndex]
valuequeue.append(pair)
DijkstraArr[i][StartSiteIndex] = float("inf") #无向边,从正向走过去就不要走回来了
else:
continue #如果不连通(权值是无穷大)则跳过
#初步找到了所有和StartSite相连的点,建立邻接路径矩阵,每次保存最短路径,之后可以倒序输出。
while(len(valuequeue) > 0):#非空,先将队列排序,按照value递增排序,每次弹出队列头。
sorted(valuequeue, key=lambda t: t[1]) #按照value对valuequeue中的pair进行排序
#valuequeue中最小值可能不止一个,随机返回一个最小值
minline = []
min_in_minline = valuequeue[0][1] #valuequeue头上的一定是最小的
for tmin in valuequeue:
if tmin[1] == min_in_minline:
minline.append(tmin)
else:
break
random.shuffle(minline)
[tindex, tvalue, tparent] = valuequeue.pop(valuequeue.index(minline.pop(0))) #释放队列头,即权值最小的节点
RouteMap[tparent][tindex] = tvalue #这一条路径已经确定,记录下来
BusIdMap[tparent][tindex].extend(MapCreater.BusIdArr[tparent][tindex]) #保存路线站点
#DijkstraArr[tparent][tindex] = float("inf")
if tindex == EndSiteIndex: #这样就找到了
#return tvalue, RouteMap, BusIdMap
if minlen >= tvalue:
minlen = tvalue
# for eachroute in RouteMaps:
# if doublelist_equal(eachroute, RouteMap):
# break
# else:
RouteMaps.append(RouteMap)
BusIdMaps.append(BusIdMap)
is_continue -= 1
break
else:
is_continue = 0
return minlen, RouteMaps, BusIdMaps
else: #这样就还没找到
temparr = [] #暂时保存新扩展的节点
for i, tsite in enumerate(DijkstraArr[tindex]):
if tsite < 10000:
tpair = [i, tsite + tvalue, tindex] #因为是在tindex对应的节点上扩展的,所以权值应该是tindex的权值+本身的权值
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源介绍】 基于python实现的公交换成系统源码(求解最短路径+最少换乘问题)带GUI界面.zip 基于python实现的公交换成系统源码(求解最短路径+最少换乘问题)带GUI界面.zip 基于python实现的公交换成系统源码(求解最短路径+最少换乘问题)带GUI界面.zip 【说明】 该项目是个人毕设项目,答辩评审分达到95分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。 该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 欢迎下载交流,互相学习,共同进步!
资源推荐
资源详情
资源评论





















收起资源包目录








































































共 62 条
- 1
资源评论

- m0_741663112024-01-04支持这个资源,内容详细,主要是能解决当下的问题,感谢大佬分享~
- FluoxitineYL2023-12-01资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
- 普通网友2023-11-11资源不错,内容挺好的,有一定的使用价值,值得借鉴,感谢分享。onnx2023-11-24嗯嗯,客气了,互相学习1

onnx
- 粉丝: 1w+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 暑假电子商务实践报告.docx
- 如何做好项目管理-精选.ppt
- (源码)基于Spring Boot和Spring Cloud的分布式谷粒商城系统.zip
- 算法的概念优质课.pptx
- 中传传媒经济学硕士影视项目管理方向就业状况好不好.doc
- 专题讲座资料(2021-2022年)单片机红外线防盗报警系统课程设计.doc
- 合作开发贷款管理软件协议书.docx
- 项目管理项目变更控制表样本.doc
- Comsol锂离子电池仿真:方形电池充放电循环热仿真与流热耦合多物理场分析
- 鲁班软件安装消防培训.ppt
- 卫星图像处理流程.docx
- 某工程精装修项目管理成品保护控制标准.docx
- 霍尼韦尔智能家居系统的几大优势.pdf
- 深度学习-卷积神经网络算法简介.pdf
- 计算机大学生个人实习报告三篇范文.docx
- Android项目开发实训项目总结报告新.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
