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. 至于某种语言来说,一般都要讲究一些特别的算法,包含但不限于: 矩阵方面的计算 指数计算 对数计算 多项式运算 各类方程求解 总之.仅 ...
随机推荐
- nginx笔记4-负载均衡带来的问题以及解决办法
接着笔记3,将笔记三的改造一下,现在分别启动两个Tomcat,在页面获取session.如图所示: tomcat2的session: tomcat1的session: 根据上图发现,每个tomcat取 ...
- window下nginx注册成服务
1. a.下载windows版nginx (http://nginx.org/download/nginx-1.10.0.zip),并且下载注册服务工具, b.下载地址: http://repo.je ...
- 【前端】诸葛io收集前端js报错信息
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/zhuge_error.html 一.什么是诸葛io 诸葛io就是通过分析用户的操作事件对用户数据,行为路径等进行分 ...
- nginx重写rewrite的[emerg] unknown directive
今天写nginx的重写规则.怎么写总是报这个错误.
- Nginx HTTP模块指令
alias 指令 该指令用于在url和系统路径之间的映射. location /a/{ alias /b/; } error_page 定义错误页面 error_page 404 /404.html; ...
- printk优先级
printk是在内核中运行的向控制台输出显示的函数,Linux内核首先在内核空间分配一个静态缓冲区,作为显示用的空间,然后调用sprintf,格式化显示字符串,最后调用tty_write向终端进行信息 ...
- Java中用正则表达式找出数字
Java中用正则表达式找出数字 1.题目 String str = "fjd789klsd908434jk#$$%%^38488545",从中找出78990843438488 ...
- C++遍历二维数组的四种方法
#include <iostream> using std::cin; using std::cout; using std::endl; using std::string; using ...
- Codeforces Round #432 (Div. 1) B. Arpa and a list of numbers
qtmd的复习pat,老子不想看了,还不如练几道cf 这题首先可以很容易想到讨论最后的共因子为素数 这个素数太多了,1-1e6之间的素数 复杂度爆炸 所以使用了前缀和,对于每个素数k的每个小区间 (k ...
- 剑指offer 第十天
37.数字在排序数组中出现的次数 统计一个数字在排序数组中出现的次数. 采用二分查找法 /* 方法一:时间复杂度O(n),不可选 */ public class Solution { public i ...