Floyd-Warshall算法(Floyd-Warshall
algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。
通过一个图的权值矩阵求出它的每两点间的最短路径矩阵。
从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按一个公式,构造出矩阵D(1);又...
分类:
其他好文 时间:
2014-09-12 13:31:46
阅读次数:
332
我们知道,在图论算法中,求最短路是最基本的问题。在求最短路的问题中,应用双向广度优先搜索算法,又是一个较为高效而又简单的算法。所谓双向广度优先搜索,其实根本的核心还是BFS,只不过它是从起点和终点两头同时搜索,大大提高了搜索效率,又节省了搜索空间。广搜大家知道当然是用队列来实现了,在这里,要注意的问题就是,我们必须按层搜索,正向队列处理一层,接着去处理反向队列的一层,按层交替进行,而不是按节点交替...
分类:
其他好文 时间:
2014-09-12 11:59:13
阅读次数:
232
题意:一些牛要去某一点參加聚会,然后再回到自己家,路是单向的,问花费时间最多的那头牛最少须要花费多长时间。思路:从聚会地点返回,相当于是从某一点到其它各个点的最短路径。从牛的家中走到聚会地点,能够把路径反过来变成从聚会地点到各个点的最短路径,两个最短路径值加起来就是每头牛所花费的最小时间,找出最大的...
分类:
其他好文 时间:
2014-09-10 19:11:50
阅读次数:
191
题目大意:两个小屁孩要乘飞机去旅行。现在给一些无向边和边权,另外他们还有K次免费乘坐飞机的机会,问从起点到终点的最小话费是什么。
思路:分层图第一题。之前听到分层图还以为是真的建K个图,然后不同层数之间的点连边跑最短路。。后来经同学讲解才发现我想多了。。
其实还是动归的思想(最短路不也是动归的思想么(`?ω?´)),f[ i ][ j ]表示在j位置时,已经用了i次免费机会的时候的最小...
分类:
其他好文 时间:
2014-09-10 15:59:00
阅读次数:
209
最短路径算法也是常用的图算法,在网上看到了一份c的代码,写的很清楚,今天有空给写成java的了,就当练手了。另,算法导论362页详细介绍了Bellman-Ford算法,本来打算再写个Dijsktra算法的,可是今天比较赖,就写这一个算法吧。package path;import java.util....
分类:
Web程序 时间:
2014-09-10 15:28:40
阅读次数:
175
题目大意:给定一个无向图,每条边有边权,有些点有点权,一些点是加油站,求一条起点到终点的最短路,使经过有点权的点不超过k次,一管油只能走limit的时间,时间到了就只能到加油站花cost的时间加油
那个红绿灯的计算公式是 red*red/2/(red+green) 考场上很多人没推出来这个挂掉了 我推出来不会写,写了爆搜,26分
限制条件有点多。。。考虑到k
首先我们枚举每一个加油站(起始点...
分类:
其他好文 时间:
2014-09-10 09:39:20
阅读次数:
1020
题目地址:http://acdream.info/problem?pid=1198
比赛的时候做出的人很少。。。所以我也没看。。。。其实就是一道简单的最短路。。。要使时间最短,那么对于每一个点来说都要最短的时间从起点走到该点,然后再用最短的时间从该点到终点,那么只要求两次最短路就行了。然后最后求两个最短路的和的最大值,即最晚到达的时间。
代码如下:
#include
#include
#...
分类:
其他好文 时间:
2014-09-09 21:38:59
阅读次数:
252
这是一个简易的Dijkstra算法的优化实现,利用了堆,这里使用C++中的优先级队列。利用STL内置的堆实现只是优化的第一步,更进一步的优化包括使用Fibonacci堆等更高级数据结构。算法中,使用邻接表作为存储图的数据结构,利用一个int数组d保存过程中及最后得到的最短路长度,再自定义一个pair...
分类:
编程语言 时间:
2014-09-09 19:58:49
阅读次数:
285
题意:给一个n*m的格子,格子中有一些数,如果是正整数则为到此格子的花费,如果为-1表示此格子不可到,现在给k个宝藏的地点(k#include #include #include #include #include #define Mod 1000000007using namespace std;...
分类:
其他好文 时间:
2014-09-09 15:05:38
阅读次数:
276
分析:这道题就是要求求出俊爷能赚我多少钱!
然后这道题中,俊爷建设的所有路径都是最短的,然后还要求求出在这些最短路径中路径最大的一个--maxcost!
由于是最短路径了,所以我需要的支付的钱为:maxcost*(n-1);实际所花的钱其实就是将每条路径所花的钱的总和!
然后怎么求出每条路径的花费呢?那么就是使用最小生成树来解决了!在建立最小生成树的时候便可求出最大值maxcost了!
然后剩下的就好办了,直接就是一个减法就ok了!...
分类:
其他好文 时间:
2014-09-09 13:26:38
阅读次数:
201