上一篇博文中讲了Dijkstra算法,这次博文要讲解的是floyd算法,其中Dijkstra算法是属于贪心算法,而floyd算法是动态规划的一个算法:
具体的算法如下:
其中一个矩阵是用来存放最短路径的,另外一个矩阵是用来存放前驱顶点的;
#include
using namespace std;
#define Max 5
#define Infinity 65535
void ma...
分类:
其他好文 时间:
2014-09-25 11:17:09
阅读次数:
208
UVA 11280 - Flying to Fredericton
题目链接
题意:给定一些国家,和两个国家间的花费,现在有一些询问,询问每次最多转k次飞机,最小花费
思路:dijkstra变形,多开一维表示转机次数即可
代码:
#include
#include
#include
#include
#include
#include
#include
...
分类:
其他好文 时间:
2014-09-25 01:22:28
阅读次数:
295
详细介绍:广度优先搜索算法八:Dijkstra算法戴克斯特拉算法(Dijkstra’s algorithm)是由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出。迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。该算法常用于路由算法或者作为其他图算法的一个子模块。...
分类:
其他好文 时间:
2014-09-25 00:18:07
阅读次数:
280
图结构中应用的最多的就是最短路径的查找了,关于最短路径查找的算法主要有两种:迪杰斯特拉算法(Dijkstra)和Floyd算法。
其中迪杰斯特拉算法(Dijkstra)实现如下:
原理就是不断寻找当前的最优解:
void main()
{
int V[Max][Max]={0,8,32,Infinity,Infinity,
12,0,16,15,Infinity,
Infinity...
分类:
其他好文 时间:
2014-09-24 23:56:27
阅读次数:
295
UVA 10246 - Asterix and Obelix
题目链接
题意:给定一个图,每个点有一个代价,边有一个代价,现在有q次询问,每次询问从u到v的最小花费,花费的计算方式为,路径代价加上路径上最大代价结点的代价
思路:枚举最大代价结点,然后做dijkstra,做的过程中忽略掉比枚举点更大代价的点,然后更新所有的答案,预处理完成后每次询问就可以在O(1)时间内完成了
...
分类:
其他好文 时间:
2014-09-24 22:30:48
阅读次数:
250
题目链接:Codeforces 449B Jzzhu and Cities
题目大意:Jzzhu是一个国家的总统,这个国家有N座城市,以1为首都,已经存在了M条公路,给定M条路。并且还有K条铁轨,铁轨均有首都出发,连接si,距离为yi。现在Jzzhu想要节省经费,拆除一些铁轨,问说最多能拆除多少个铁轨,要求每座城市与首都的最短距离不变。
解题思路:最短路,多加一个标记数组,每个si标记...
分类:
其他好文 时间:
2014-09-24 16:31:07
阅读次数:
179
题意:给出一个迷宫,在迷宫的节点处,面向某个方向只能向给定的方向转弯。给出起点和终点输出迷宫的最短路径,这里指的是刚刚离开起点的时刻,所以即使起点和终点重合路径也非空。分析:用三个变量来表示状态,r,c,dir,分别代表所处的位置和朝向。在输入数据的同时,也要初始化has_edge[r][c][di...
分类:
其他好文 时间:
2014-09-24 05:43:35
阅读次数:
2220
每个点有2中颜色 只有一条路上的两个点颜色一样才能通过这条路 最短路加上等待的时间处理 处理的是参考别人的 唉还是太弱了
#include
#include
#include
#include
#include
using namespace std;
int s, e;
int n, m;
int a[333];
int b[333];
int c[333];
int first[...
分类:
其他好文 时间:
2014-09-24 00:30:05
阅读次数:
270
题目:hdoj 1428 漫步校园
分析:题意还是有必要说的,他考虑从A区域到B区域仅当存在一条从B到机房的路线比任何一条从A到机房的路线更近,注意这句话,可见先让你求每个点到机房(n,n)点的最短路。当然这里用BFS比较好,注意要用优先队列.。接着这句话告诉你,每次选择走的时候可以有多种选择,只要满足上面每一步都比当前这一步更近,即dis【child】
AC代码:
...
分类:
其他好文 时间:
2014-09-23 14:02:34
阅读次数:
253
仔细观察杨辉三角后可以发现从最高点到第n行第k个数的最短路为c(n+1,k);根据Lucas定理可以求出,一般来说要求答案模去一个质数p且p的范围不大于10^5则可用Lucas.Lucas(n,m,p)=cm(n%p,m%p)* Lucas(n/p,m/p,p)Lucas(x,0,p)=1;另外注意...
分类:
其他好文 时间:
2014-09-23 03:39:43
阅读次数:
207