题目描述 维护一个集合,集合中的元素与点u的最短距离已经确定,求出集合内元素所能到达的点到点u的距离,取最短的距离对应的点加入集合直到集合包含点v。 每次更新距离只与新加入集合的点有关。#include #include #include #define N 1005 unsigned w[N][N...
分类:
编程语言 时间:
2015-06-01 00:39:09
阅读次数:
161
1. 定义
BFS是Breath First Search的缩写,是广度优先搜索的意思,是图的遍历方式的一种。
由于BFS是从起点一层一层的进行搜索的,所以凡是需要求最短路径的问题,都可以尝试看BFS能否解决,比如Dijkstra的单源最短路径算法使用了BFS的思想。另外,在执行广度优先搜索的过程中将构造出一棵树,这也是Prim的最小生成树算法思想。在做BFS的时候,有两点需要特别注意...
分类:
其他好文 时间:
2015-05-31 09:29:05
阅读次数:
157
我们知道,Dijkstra是解决单源最短路问题的,并且最基本的算法仅能求出最短路的长度,而不能输出路径,本文基于Dinjkstra进行改进,使之能记录源点到任意点的所有最短路径。使用vector来记录一条路径,因为每个结点可能有多条最短路径,因此把这些路径都装在一个vector中,因此可以用一个vector<vector >来表示一个结点的所有最短路径,把所有结点的最短路径都存放起来,又需要一个vector容器,因此所有结点的所有最短路径的集合可以用vector<vector<vecto...
分类:
编程语言 时间:
2015-05-29 13:59:38
阅读次数:
270
转载自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算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负。若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的。设road[i][j]表示相邻的i到j的路长U集合存储已经求得的到源点最短路径的节点,S集合表示还...
分类:
编程语言 时间:
2015-05-19 12:10:38
阅读次数:
244
迪杰斯特拉单源最短路算法。对成语进行预处理。做出邻接矩阵即可。#include#include#include#includeusing namespace std;const int maxn = 1005;int c[maxn], len[maxn], cost[maxn][maxn], fla...
分类:
其他好文 时间:
2015-05-12 14:58:20
阅读次数:
101
Dijkstra单源最短路算法#include#include#include#includeusing namespace std;const int maxn = 205;int cost[maxn][maxn];int n, m, u, v, c, su, eu;int mincost[max...
分类:
其他好文 时间:
2015-05-11 19:34:34
阅读次数:
133
前面说到“原生的Dijkstra”,由于Dijkstra采用的是贪心策略,在贪心寻找当前距离源结点最短的结点时需要遍历所有的结点,这必然会导致效率的下降,时间复杂度为n^n。因此当数据量较大时会消耗较长时间。为了提高Dijkstra的效率,只有对Dijkstra的贪心策略进行改进。
由于Dijkstra采用的贪心策略是每次寻找最短距离的结点并将其放入存放所有已知最短距离结点的S集合中,可以联想到堆以及优先级队列这些数据结构,这些结构都能非常高效地提供当前状态距离最短的结点。实践也可以证明这两种优化对于Dij...
分类:
其他好文 时间:
2015-05-11 10:59:32
阅读次数:
190