使用python内置函数直接实现Dij算法,每次用全部已包含集中的点进行计算:

def Dij(start):list_a = [1,2,3,4,5,6,7,8,9,10] ##所有点的集合list_s = [start]  ##最短路径已经确定的点的集合sdist = {} ##最后的结果,存为一个dictionary,key是点的数字,value是从start出发最短的距离dist[start] = 0 while True:if len(list_s) == 10: return disttemp = {} ##临时字典,记录所有从s出发右边可以用一条边连接的点for i in list_s:for j in list(set(list_a)-set(list_s)):if map[i][j] >= 0:temp[(dist[i]+map[i][j])] = [i,j] ##记录点的临时最短距离,为s中的点的最短距离加上该边的距离dist[temp[min(temp)][1]] = min(temp) ##挑选其中临时最短距离最小的一个点加入s,其临时最短距离就是其真实的最短距离patch[temp[min(temp)][1]] = temp[min(temp)][0] ##记录最短路径具体经过的点list_s.append(temp[min(temp)][1]) ##挑选其中临时最短距离最小的一个点加入sif __name__ == '__main__':map=[[],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],]map[1][2] = 40map[1][3] = 8map[1][4] = 10map[2][7] = 10map[2][5] = 6map[3][2] = 4map[3][4] = 12map[3][6] = 2map[4][6] = 1map[5][3] = 2map[5][6] = 2map[5][7] = 4map[6][8] = 4map[6][9] = 3map[7][8] = 20map[7][10] = 1map[8][5] = 0map[8][10] = 20map[9][4] = 6map[9][8] = 10map[9][10] = 2patch={}Dij(1)

使用data_structure课中的,每次用结点进行搜索,并不断更新dist的步骤:

Python实现代码:

def Dij(start):list_a = [1,2,3,4,5,6,7,8,9,10]list_s = [start]  dist = [[],100,100,100,100,100,100,100,100,100,100]dist[start] = 0 ##初始化最短距离,起点设为0,和起点有边连接的设为该边数值,其余点设为无穷大(此处为100)for j1 in list_a: if map[start][j1] >= 0:dist[j1] = map[start][j1]while True:if len(list_s) == 10: ##终止条件return disttemp ={}for j2 in list(set(list_a)-set(list_s)): ##未收录在s集合中的点中dist最小的点Vtemp[dist[j2]] = j2V = temp[min(temp)]list_s.append(V) ##将V加入s中for j3 in list(set(list_a)-set(list_s)): ##更新所有未收录在s集中的点的distif map[V][j3] >= 0:if dist[V] + map[V][j3] < dist[j3]:dist[j3] = dist[V] + map[V][j3]path[j3] = V

现在考虑解决任意起点终点的最短路径问题,用floyd算法:

每次迭代计算只经过编号小于k的定点的路径

其Python的代码实现为:

def floyd():## 初始化时没有边直接相连的点之间最短距离需要设置成无穷大,此处为100P = mapD = mapfor i1 in range(1,11):for j1 in range(1,11):if i1 == j1:D[i1][j1] = 0if map[i1][j1] == -1 :D[i1][j1] = 100for k in range(1,11):for i2 in range(1,11):for j2 in range(1,11):if D[i2][k]+D[k][j2] < D[i2][j2]:D[i2][j2] = D[i2][k]+D[k][j2]return Dif __name__ == '__main__':map=[[],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],[[],-1,-1,-1,-1,-1,-1,-1,-1,-1,-1],]map[1][2] = 40map[1][3] = 8map[1][4] = 10map[2][7] = 10map[2][5] = 6map[3][2] = 4map[3][4] = 12map[3][6] = 2map[4][6] = 1map[5][3] = 2map[5][6] = 2map[5][7] = 4map[6][8] = 4map[6][9] = 3map[7][8] = 20map[7][10] = 1map[8][5] = 0map[8][10] = 20map[9][4] = 6map[9][8] = 10map[9][10] = 2result = floyd()

shortest path 实现相关推荐

  1. P - The Shortest Path in Nya Graph HDU - 4725

    P - The Shortest Path in Nya Graph HDU - 4725 最短路 不是 每两个点之间按层数设置边权 + 额外边权 TLE 是 相邻两层之间设置边权 + 额外边权 需注 ...

  2. [CF843D]Dynamic Shortest Path

    [CF843D]Dynamic Shortest Path 题目大意: 给定一个带权有向图,包含\(n(n\le10^5)\)个点和\(m(m\le10^5)\)条边.共\(q(q\le2000)\) ...

  3. zoj 2760 How Many Shortest Path 最大流

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1760 Given a weighted directed graph ...

  4. OSPF(Open Shortest Path First开放式最短路径优先)

    **协议** OSPF(Open Shortest Path First开放式最短路径优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(a ...

  5. 4kyu Path Finder #2: shortest path

    4kyu Path Finder #2: shortest path 题目背景: Task You are at position [0, 0] in maze NxN and you can onl ...

  6. AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)

    题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_C All Pairs Shortest Path Input ...

  7. AOJ GRL_1_B: Shortest Path - Single Source Shortest Path (Negative Edges) (Bellman-Frod算法求负圈和单源最短路径)

    题目链接: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_B Single Source Shortest Path ( ...

  8. AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)

    题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_A Single Source Shortest Path In ...

  9. zoj How Many Shortest Path

    How Many Shortest Path 题目: 给出一张图,求解最短路有几条.处理特别BT.还有就是要特别处理map[i][i] = 0,数据有不等于0的情况! 竟然脑残到了些错floyd! ! ...

  10. CF938G Shortest Path Queries(线性基/线段树分治/异或)

    CF938G Shortest Path Queries 支持加边删边和查询两点之间的异或最短路,我们可以使用线段树分治,然后利用线性基求解. 但是这里图可能不是联通的,所以查询两点之间的异或和需要边 ...

最新文章

  1. Python(迭代、三元表达式、列表生成、生成器、迭代器)
  2. 网站推广专员浅析不做大幅修改如何调整网站推广内容?
  3. hashset去重原理_基于simhash的文本去重原理
  4. 批梯度下降 随机梯度下降_梯度下降及其变体快速指南
  5. 19-6/28作业:100以内偶数求和
  6. python中导入模块队列_【每日学习】Python中模块的导入
  7. 程序员山洞开发程序,两年敲45万行代码,网友:一般人扛不住
  8. Python实现完全二叉树
  9. PHPCMS v9里面,推荐位ID【posid】的值是如何确定的?是自定义的还是官方定义好的?...
  10. servlet的url-pattern匹配规则详细描述
  11. jeep智能手表软件测评中心的测试,够了,不要太帅:Jeep黑骑士智能手表深度评测...
  12. 锐捷交换机配置snmp版本_原创整理:锐捷S3550系列交换机基本配置命令(一)
  13. unity相机自由移动
  14. 打印机扫描无法连接到计算机名,网络打印机无法扫描到电脑怎么处理
  15. 《卡拉马佐夫兄弟》:父子五人性格概述
  16. iOS开发之千呼万唤始出来iOS10更新内容以及iOS 10的闪退问题解决
  17. 关于课题的一点思考(基于多生理信号的情绪识别)
  18. java绘制菱形平行四边形_Java实现金字塔形菱形平行四边形
  19. 基于PyTorch的生成对抗网络入门(3)——利用PyTorch搭建生成对抗网络(GAN)生成彩色图像超详解
  20. 大学生创新工作室阶段性总结

热门文章

  1. 记住要仰望星空,不要低头看脚下!
  2. VS2017 DLL 不能正常注册 HRESULT -2147024703 排查
  3. 自己动手做网络爬虫系列——1
  4. Canvas三种动态画圆实现方法说明
  5. pxe装机dhcp获取不到_Windows – PXE启动无法通过DHCP获取IP地址,但DHCP在操作系统启动时有效...
  6. Python年利率计算器【N日年化收益率】
  7. Android打开相册并上传图片至服务器
  8. oralce的时间戳数据同步到hive报脏数据错误
  9. 计算机网络与图论,图论与复杂网络.pdf
  10. 视频生成动画数据OpenPose+OpenCV