街区最短路径问题时间限制:3000ms | 内存限制:65535KB难度:4描述一个街区有很多住户,街区的街道只能为东西、南北两种方向。住户只可以沿着街道行走。各个街道之间的间隔相等。用(x,y)来表示住户坐在的街区。例如(4,20),表示用户在东西方向第4个街道,南北方向第20个街道。现在要建一个...
分类:
其他好文 时间:
2014-07-16 21:24:42
阅读次数:
199
Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负。Dijkstra算法是贪婪算法的一个很好的例子。设置一顶点集合S,从源点s到集合中的顶点的最终最短路径的权值均已确定。算法反复选择具有最短路径估计的顶点u,并将u加入到S中,对u的所有出边进行松弛。如果可...
分类:
其他好文 时间:
2014-07-16 20:34:45
阅读次数:
261
我们已经知道了如何通过Dijkstra算法在非负权图中找到最短路径。即使图中有负权边,我们也知道通过Bellman-Ford算法找到一个从 给定的源点到其它所有节点的最短路径。现在我们将看到一个在线性时间内运行得更快的算法,它可以在有向无环图中找到从一个给定的源点到其它所有可达顶点的 最短路径,又名...
分类:
其他好文 时间:
2014-07-16 20:24:55
阅读次数:
199
这同样是一道搜索题,所不同的是要搜索的图是三维的而不是二维的。但这并没什么大的改变,只是增加了两个搜索的方向而已。
要注意的地方是,所给出的起点终点的坐标是按照 列,行,层的顺序。
与DFS不同,BFS能保证所搜到的路径一定是最短路径,所以我们不需要维护一个多维(此处为3维)数组来记录访问到每一点的最小步数,只需要维护一个多维数组来标记是否走过就可以了。DFS中是要不停回溯来找最短路径的,但是BFS是不需要的。这是BFS本身的性质所决定的,BFS能保证第一次搜索到某一点时所走的路径就是到该点的最短路径。以后...
分类:
其他好文 时间:
2014-07-14 13:42:05
阅读次数:
181
求最少去掉几个公交站使得从s到t的最短路径大于k。迭代加深搜索。#include #include #include using namespace std;#define maxn 60#define maxm 50000int n,m,K,cnt,up;int head[maxn],pre[ma...
分类:
其他好文 时间:
2014-07-14 09:29:57
阅读次数:
221
之前我们介绍了用动态规划的方法来解决一些最优化的问题。但对于有些最优化问题来说,用动态规划就是“高射炮打蚊子”,采用一些更加简单有效的方法就可以解决。贪心算法就是其中之一。贪心算法是使所做的选择看起来是当前最佳的,期望通过所做的局部最优选择来产生一个全局最优解。...
分类:
其他好文 时间:
2014-07-13 18:06:01
阅读次数:
377
Dijkstra算法:
首先,引进一个辅助向量D,它的每个分量D[i]表示当前所找到的从始点v到每个终点vi的的长度:如D[3]=2表示从始点v到终点3的路径相对最小长度为2。这里强调相对就是说在算法过程中D的值是在不断逼近最终结果但在过程中不一定就等于长度。它的初始状态为:若从v到vi有弧,则D为弧上的权值;否则置D为∞。显然,长度为 D[j]=Min{D | vi∈V} 的路径就是从...
分类:
其他好文 时间:
2014-07-12 23:44:15
阅读次数:
330
和分治法一样,动态规划也是通过组合子问题的解而解决整个问题的。分治法是指将问题划分为一个一个独立的子问题,递归地求解各个子问题然后合并子问题的解而得到原问题的解。与此不同,动态规划适用于子问题不是相互独立的情况,即各个子问题包含公共的子子问题。在这种情况下,如果用分治法会多做许多不必要的工作,重复求解相同的子子问题。而动态规划将每个子问题的解求解的结果放在一张表中,避免了重复求解。...
分类:
其他好文 时间:
2014-07-12 19:20:19
阅读次数:
258
链式向前星+spfa解hdu3790的结题报告,解释了链式向前星的原理,欢迎讨论...
分类:
其他好文 时间:
2014-07-10 21:50:58
阅读次数:
180
有一个无权的图G,使用某个顶点s作为输入参数,找出从s到其它顶点的最短路径。这样,只要计算包含在路径中的边数就可以了。比如,一个word ladder problem,一次只变换一个字母,找出从fool到sage的最短路径。可用的单词可以转化为一个图:首先寻找与fool距离为1的顶点:然后可以寻找距...
分类:
其他好文 时间:
2014-07-10 14:46:41
阅读次数:
239