python解决图的最短路径问题
遇到一个算法题目,描述如下:

对图结构有了解的不难发现,这是经典的求图的最短路径问题。以下是python代码:
def findMin(row):
minL = max(row)
for i in row:
if i != -1 and minL > i:
minL = i
return minL
def initRow(row, plus):
r = []
for i in row:
if i != -1:
i += plus
r.append(i)
return r def getMinLen(table, e, t):
count = len(table) - 1
startPoint = 1
#记录原点到各点最短距离 初始值为-1,即不可达
lenRecord = list((-1 for i in range(count+1)))
lenRecord[startPoint] = 0
#记录每次循环的起点
points = [startPoint]
#已得到最短距离的点
visited = set()
while len(points)>0:
#当前起点
curPoint = points.pop()
#原点到当前起点的距离
curLen = lenRecord[curPoint]
#当前起点到各点的距离
curList = initRow(table[curPoint], t)
#当前起点到各点的最短距离
curMin = findMin(curList)
visited.add(curPoint)
idx = 0
while idx<count:
idx += 1
#当前点不可达或到当前点的最短距离已计算出 则跳过
if curList[idx] == -1 or idx in visited:
continue
#记录距离当前起点最近的点作为下次外层循环的起点
if curList[idx] == curMin:
points.append(idx)
#如果从原点经当前起点curPoint到目标点idx的距离更短,则更新
if lenRecord[idx] == -1 or lenRecord[idx] > (curLen+curList[idx]):
lenRecord[idx] = curLen+curList[idx]
return lenRecord[e] def processInput():
pointCnt, roadCnt, jobCnt = (int(x) for x in raw_input().split())
table = []
for i in range(pointCnt+1):
table.append([-1] * (pointCnt+1))
for i in range(roadCnt):
(x, y, w) = (int(n) for n in raw_input().split())
if table[x][y] == -1 or table[x][y] > w:
table[x][y] = w
table[y][x] = w
res = []
for i in range(jobCnt):
e, t = (int(x) for x in raw_input().split())
res.append(getMinLen(table, e, t))
for i in res:
print(i) processInput()
python解决图的最短路径问题的更多相关文章
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- 图的最短路径---弗洛伊德(Floyd)算法浅析
算法介绍 和Dijkstra算法一样,Floyd算法也是为了解决寻找给定的加权图中顶点间最短路径的算法.不同的是,Floyd可以用来解决"多源最短路径"的问题. 算法思路 算法需要 ...
- 图的最短路径---迪杰斯特拉(Dijkstra)算法浅析
什么是最短路径 在网图和非网图中,最短路径的含义是不一样的.对于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径. 对于网图,最短路径就是指两顶点之间经过的边上权值之和最 ...
- 带权图的最短路径算法(Dijkstra)实现
一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...
- 数据结构 -- 图的最短路径 Java版
作者版权所有,转载请注明出处,多谢.http://www.cnblogs.com/Henvealf/p/5574455.html 上一篇介绍了有关图的表示和遍历实现.数据结构 -- 简单图的实现与遍历 ...
- C++编程练习(11)----“图的最短路径问题“(Dijkstra算法、Floyd算法)
1.Dijkstra算法 求一个顶点到其它所有顶点的最短路径,是一种按路径长度递增的次序产生最短路径的算法. 算法思想: 按路径长度递增次序产生算法: 把顶点集合V分成两组: (1)S:已求出的顶点的 ...
- 《用Python解决数据结构与算法问题》在线阅读
源于经典 数据结构作为计算机从业人员的必备基础,Java, c 之类的语言有很多这方面的书籍,Python 相对较少, 其中比较著名的一本 problem-solving-with-algorithm ...
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法 图的最短路径的概念: 一位旅客要从城市A到城市B,他希望选择一条途中中转次数最少的路线.假设途中每一站都需要换车,则这个问题反映到图上就是 ...
- 有关科学计算方面的python解决
在科学计算方面,一般觉得matlab是一个超强的东西.此外还有R. 至于某种语言来说,一般都要讲究一些特别的算法,包含但不限于: 矩阵方面的计算 指数计算 对数计算 多项式运算 各类方程求解 总之.仅 ...
随机推荐
- 前端JS面试题汇总 Part 3 (宿主对象与原生对象/函数调用方式/call与apply/bind/document.write)
原文:https://github.com/yangshun/front-end-interview-handbook/blob/master/questions/javascript-questio ...
- CEPH RGW 设置 user default_placement为ssd-placement,优化100KB-200KB小文件性能,使用户创建的bucket对象放置到 SSD设备的Pool上。
sudo radosgw-admin metadata get user:tuanzi > user.md.json vi user.md.json #to add ssd-placement ...
- mongodb副本集搭建过程中的问题和解决技巧
在我以往的认知中,一个系统一旦正式上线,多半不会轻易的迁移服务器,尤其是那种涉及到多个关联应用,涉及到多台硬件服务器的系统,因为这种迁移将是牵一发而动全身的. 但是,却仍然有这种情况存在,就如我这几天 ...
- CSS3之background-origin
1.属性简介 background-origin:border|content|padding|!important border:从border区域开始显示背景: content:从content区 ...
- HighCharts之气泡图
HighCharts之气泡图 1.HighCharts之气泡图源码 bubble.html: <!DOCTYPE html> <html> <head> <m ...
- Java注释分类
Java注释分类 1.单行注释 //打印结果 System.out.println("结果是:"+result); 2.多行注释 /** * @autho ...
- 利用Windows性能计数器(PerformanceCounter)监控
一.概述 性能监视,是Windows NT提供的一种系统功能.Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器.性能对象,就 ...
- 芝麻HTTP:爬虫的基本原理
我们可以把互联网比作一张大网,而爬虫(即网络爬虫)便是在网上爬行的蜘蛛.把网的节点比作一个个网页,爬虫爬到这就相当于访问了该页面,获取了其信息.可以把节点间的连线比作网页与网页之间的链接关系,这样蜘蛛 ...
- Codeforces Round #430 (Div. 2) D. Vitya and Strange Lesson
因为抑或,一眼字典树 但是处理起来比较难 #include<iostream> #include<map> #include<iostream> #include& ...
- Minimum Inversion Number~hdu 1394
The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that ...