上一篇文章,利用迪杰斯特拉(dijkstra)算法,实现了无向图的最短路径搜索功能。本篇将以南京地铁为例,用迪杰斯特拉算法实现两个站点之间的最短路径搜索。
借用百度百科,南京2015年4月份的地铁运行线路图如下:
创建一个数据构造类,初始化南京地铁的各条线路站点数据(截至2015年4月南京地铁运营公司数据,与上图对应)
/**
*
*/
package com.test.dij...
分类:
编程语言 时间:
2015-05-31 16:57:02
阅读次数:
280
1. 定义
BFS是Breath First Search的缩写,是广度优先搜索的意思,是图的遍历方式的一种。
由于BFS是从起点一层一层的进行搜索的,所以凡是需要求最短路径的问题,都可以尝试看BFS能否解决,比如Dijkstra的单源最短路径算法使用了BFS的思想。另外,在执行广度优先搜索的过程中将构造出一棵树,这也是Prim的最小生成树算法思想。在做BFS的时候,有两点需要特别注意...
分类:
其他好文 时间:
2015-05-31 09:29:05
阅读次数:
157
转载自http://acm.uestc.edu.cn/bbs/read.php?tid=5670下载ppt帐号:qscqesze密码:123456-------------------------------------------------------------------单源最短路径:松弛操...
分类:
其他好文 时间:
2015-05-28 13:52:18
阅读次数:
248
一个有n个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(克鲁斯卡尔)算法或Prim(普里姆)算法求出。应用:例如要在n个城市之间铺设光缆,主要目标是要使这n个城市的任意两个之间都可以通信,但铺设光缆的费用很高,且各个...
分类:
编程语言 时间:
2015-05-26 06:44:52
阅读次数:
265
var n,m,s,t,v,i,a,b,c:longint; first,tr,p,q:array[0..20000]of longint; next,eb,ew:array[1..100000]of longint;procedure swap(a,b:longint);var t:l...
分类:
其他好文 时间:
2015-05-25 22:14:24
阅读次数:
139
//最短路径/*Dijkstra(迪杰斯特拉)算法的核心思想是贪心策略+动态规划http://www.programgo.com/article/4721147659/Dijkstra算法能得出最短路径的最优解,但是效率低*/#include using namespace std;int main...
分类:
其他好文 时间:
2015-05-25 14:21:33
阅读次数:
552
一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负。若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。设road[i][j]表示相邻的i到j的路长U集合存储已经求得的到源点最短路径的节点,S集合表示还...
分类:
编程语言 时间:
2015-05-19 12:10:38
阅读次数:
244
迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题。迪杰斯特拉算法主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。(百度百科)
这里我说一下我对于这个算法的理解, 就是求一个点到其他点的最短路径。
我们需要一个二维数组储存图的信息, 开始所有边的权值都设为正无穷, 也就是一个...
分类:
编程语言 时间:
2015-05-18 16:45:56
阅读次数:
114
前面说到“原生的Dijkstra”,由于Dijkstra采用的是贪心策略,在贪心寻找当前距离源结点最短的结点时需要遍历所有的结点,这必然会导致效率的下降,时间复杂度为n^n。因此当数据量较大时会消耗较长时间。为了提高Dijkstra的效率,只有对Dijkstra的贪心策略进行改进。
由于Dijkstra采用的贪心策略是每次寻找最短距离的结点并将其放入存放所有已知最短距离结点的S集合中,可以联想到堆以及优先级队列这些数据结构,这些结构都能非常高效地提供当前状态距离最短的结点。实践也可以证明这两种优化对于Dij...
分类:
其他好文 时间:
2015-05-11 10:59:32
阅读次数:
190