最短路径
Hearthougan
这个作者很懒,什么都没留下…
展开
-
hdu 2066 一个人的旅行
这是一个多源路径问题,可以选择与草儿家相连的城市挨个作为源点,找出该源点到各个目的地的最短时间并选取时间最短的那个,最后再在从不同源点出发的最短时间中选出一个最小的,可以用Dijkstra来求解。#include #include using namespace std;const int MAXN = 1005;const int INF = 1000000;int dist[M原创 2013-08-28 13:11:25 · 582 阅读 · 0 评论 -
poj 1201
#include #include #include using namespace std;const int MAXN = 50010;const int INF = 100000000;struct Edge{ int u, v, w;}edges[MAXN];int dist[MAXN];int n, l, r;void Inite(){原创 2013-12-28 14:36:16 · 759 阅读 · 0 评论 -
zoj 2770
#include #include #include using namespace std;const int MAXN = 1010;const int MAXM = 23000;const int INF = 100000000;struct Edge{ int u, v, w;}edges[MAXM];int n;int EN;int dist[MA原创 2013-12-28 14:38:09 · 1232 阅读 · 0 评论 -
zoj 2770 Burn the Linked Camp
Bellman_Ford实现:点击打开http://blog.csdn.net/hearthougan/article/details/17631941差分约束系统的SPFA实现:SPFA速度比Bellman_Ford快多了。链表实现,表头不存数据。#include #include #include #include using namespace std;const in原创 2013-12-30 20:48:02 · 973 阅读 · 0 评论 -
zoj 1508 Intervals
#include #include #include #include using namespace std;const int INF = 10000000;const int MAXN = 50010;struct ArcNode{ int to; int weight; ArcNode* pNext; ArcNode() { to = 0; wei原创 2013-12-31 23:58:42 · 695 阅读 · 0 评论 -
poj 2240 zoj1092 Arbitrage
#include #include #include using namespace std;const int MAXN = 35;const int MAXM = 1000;struct exchange{ int ci, cj; double cij;}Ex[MAXM];char name[MAXN][20], a[20], b[20];doubl原创 2013-12-21 19:27:00 · 737 阅读 · 0 评论 -
poj 1556 The Doors
#include #include #include #include #include using namespace std;const int INF = 100000000;const int MAXN = 100;struct Point{ double x; double y;};struct Edge{ int u; i原创 2013-12-22 14:59:39 · 842 阅读 · 0 评论 -
SPFA
算法思想: Bellman-Ford算法的时间复杂度比较高,为O(n3)或O(nm),原因在于Bellman-Ford算法要递推n次,每次递推,扫描所有的边,在递推n次的过程中很多判断是多余的。SPFA算法(Shortest Path Faster Algorithm)是Bellman-Ford算法的一种队列实现,减少了不必要的冗余判断。 SPFA算法的大致流程是用一个队列来进原创 2013-12-25 14:54:22 · 979 阅读 · 0 评论 -
Floyd Test
算法思想: Floyd(弗洛伊德)算法的基本思想是:对一个顶点个数为n的有向网(或无向网),设置一个n×n的方阵A(k) ,其中除对角线的矩阵元素都等于0外,其他元素A(k) [i][j] (i≠j)表示从顶点vi到顶点vj的有向路径长度,k表示运算步骤,k = -1, 0, 1, 2, …, n-1。初始时:A (-1)= Edge(图的邻接矩阵),即初始时,以原创 2013-12-26 21:50:19 · 696 阅读 · 0 评论 -
poj 3268
点击打开题目#include #include #include #include using namespace std;const int INF = 10000000;const int MAXN = 1010;struct ArcNode//邻接表结构{ int to; int weight; ArcNode* pNext; Ar原创 2013-12-25 15:02:04 · 750 阅读 · 0 评论 -
poj 1122 FDNY to the Rescue!
关键是建图,zoj也有一题,不过格式要求不一样,数据好像也不一样,卡那儿了!下面是能过poj的代码:#include #include #include #include using namespace std;const int MAXN = 25;const int INF = 10000010;struct Dist{ bool station; int n原创 2013-12-05 14:10:05 · 913 阅读 · 0 评论 -
zoj 2750 Idiomatic Phrases Game
题目大意: 成语接龙游戏,给定一些成语,该组成语中第1个和最后一个必须是给定的两个成语。在这组成语中,前一个成语的最后一个汉字必须和后一个成语的第一个汉字相同。在游戏过程中,Tom有一本字典,他必须从字典中选用成语。字典中每个成语都有一个权值T,表示选用这个成语后,Tom需要花时间T才能找到下一个合适的成语。你的任务是编写程序,给定字典,计算Tom至少需要花多长时间才能找到一个满足条件的原创 2013-12-04 18:18:30 · 846 阅读 · 0 评论 -
hdu 2544
作为刚接触最短路径的练习吧,懂得Dijkstra的原理,这个题就可以过了#include #include using namespace std;const int MAXN = 110;const int INF = 100000000;int S[MAXN];int dist[MAXN];int Edge[MAXN][MAXN];int N,M;void Dijks原创 2013-08-28 20:24:48 · 647 阅读 · 0 评论 -
hdu 2112 HDU Today
主要就是把名字转化成为数字顶点,建图,然后Dijkstra解决#include #include #include using namespace std;const int MAXN = 155;const int INF = 100000000;int Edge[MAXN][MAXN];int dist[MAXN];int S[MAXN];int num;void原创 2013-08-29 14:05:17 · 503 阅读 · 0 评论 -
hdu 1142 A Walk Through the Forest
分析:从始点出发,走到目标点,每走一步,只能是离目标点越来越近的路,问这样的路有几条。 以目标点为源点用dijkstra求出源点到其他各个顶点的最短路径,然后利用广搜搜索,满足Edge[v0][i] dist[i] 条件,Edge[v0][i] #include #include using namespace std;const int MAXN = 1010;const原创 2013-08-31 10:31:35 · 610 阅读 · 0 评论 -
Frogger ZOJ 1942 POJ 2253
本题类似于上一篇的卡车容量;有一句话需要理解:石头之间的青蛙距离,定义为在所有的路径之中两块石头之间的最大跳跃距离的最小值。(最小最大距离)#include #include #include #include using namespace std;#define MIN(a, b) (a > b ? b : a)#define MAX(a, b) (a > b ? a : b原创 2013-09-01 21:37:23 · 1124 阅读 · 0 评论 -
POJ Fiber Network 2570
/**本题不是求最短路径,但是用的是Floyd算法思想;我们先设m[MAXN][MAXN],m[i][j]表示从i到j的公司数目;m(0)[i][j]表示提供从i到j能直接达到的集合,m(1)[i][j]表示以(如果存在,则)v1为中间点,能提供从i到j的集合··························································原创 2013-09-01 16:33:15 · 734 阅读 · 0 评论 -
POJ 2263 Heavy Cargo
这种是通行能力(可称容量)最大路,此种路称为最大容量路。设城市i到城市j的承重载量w[i,j],则初始时从K到M没有直接路径,w[i, j] = 0;假如中间点H后,K到M的载重量修改为:w[K, M] = MAX{w[K, M], MIN(w[W][H]), w[H][M] }; 所以floyd要修改为:A(-1)[i][j] = Edge[i][j];A(k)[i][j原创 2013-09-01 19:45:19 · 778 阅读 · 0 评论 -
ZOJ 2797 POJ 2472 106 miles to Chicago
Floyd递推方程dist[i][j] = max(dis[i][j], dist[i][k]*dist[k][j]);#include #include #include using namespace std;#define MAX(a, b) (a > b ? a : b)const int MAXN = 1010;double dist[MAXN][MAXN];原创 2013-09-03 16:25:06 · 982 阅读 · 0 评论 -
Dijkstra 算法介绍以及实现
Dijkstra算法的具体实现方法为:1. 设置两个顶点的集合T和S:a) S中存放已找到最短路径的顶点,初始时,集合S中只有一个顶点,即源点v0;b) T中存放当前还未找到最短路径的顶点;2.在T集合中选取当前长度最短的一条最短路径(v0,…,vk),从而将vk加入到顶点集合S中,并修改源点v0到T中各顶点的最短路径长度;重复这一步骤,直到所有的顶点都加入到集原创 2013-11-29 20:15:18 · 1535 阅读 · 0 评论 -
ZOJ1298, POJ1135 Domino Effect
题目大意: 你的任务是编写程序,给定多米诺骨牌游戏,计算最后倒下的是哪一张骨牌、在什么时间倒下。这些多米诺骨牌游戏包含一些“关键牌”,他们之间由一行普通骨牌连接。当一张关键牌倒下时,连接这张关键牌的所有行都开始倒下。当倒下的行到达其他还没倒下的关键骨牌时,则这些关键骨牌也开始倒下,同样也使得连接到它的所有行开始倒下。每一行骨牌可以从两个端点中的任何一张关键牌开始倒下,甚至两个端点原创 2013-11-29 21:36:53 · 821 阅读 · 0 评论 -
poj 3259 Wormholes
http://poj.org/problem?id=3259判断是否存在负权回路,如果存在,则表明某个顶点i入队列的次数超过了n次,n是顶点的数目。#include #include #include #include #include using namespace std;const int MAXN = 550;const int INF = 10000000;原创 2013-12-25 18:01:49 · 641 阅读 · 0 评论