
最短路径
文章平均质量分 81
fookwood
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
ZOJ 1082 Stockbroker Grapevine (dijkstra方法)
<br />以每个点si作为顶点,开始找最短路径,找到所有到si的最短路径的最大值找出来,是vi,找出所有si对应的vi的最小值。<br /> <br />#include<iostream> #include<algorithm> #include<climits> using namespace std; const int INF=78787878;//我用INT_MAX的时候错的非常惨烈。。 int mat[101][101]; int flag[101]; int dist[101]原创 2010-07-29 11:33:00 · 650 阅读 · 2 评论 -
ZOJ 1221 Risk
<br />这个算是图论里面的简单题了,可以用floyd,dijkstra,bfs去做,,只当练手。。<br /> <br /> <br /> <br />floyd做。。<br />#include<stdio.h> #include<string.h> #include<stdlib.h> int mat[21][21]; const int INF = 99999; int main(void) { int n,from,to,t; int i,j,k,start=1;原创 2010-09-15 16:07:00 · 1476 阅读 · 0 评论 -
ZOJ 1430 / POJ 2679 The Erythea Campaign (bfs+dijkstra)
<br />繁,但是不难。<br /> <br />首先,建图,题中给出的是m*n的矩阵,里面包含了所有stronghold的分布,但是你需要把他转换成一个图。但是路径不能穿过堡垒,多以说两个堡垒之间的两个点不能相互到达。还有就是每个点应该保存它可以到达的点的信息,当使用dijkstra求最短路径的时候,这些点可以当邻接表使用,很方便的。<br /> <br />接下来是每个的危险值,求法是m+n-d,不会出现负值。d的意思是它到达离他最近的堡垒的距离。对于每个堡垒上的点做bfs求出所有点到他的最短距离,如原创 2010-08-28 00:07:00 · 1212 阅读 · 1 评论 -
ZOJ 2526 FatMouse and JavaBean II (dijkstra + 权值记录)
<br />fatmouse要找到从rm1到rm2的最短路径,但是这个路径不是唯一的。要从这些路径中找出javabean最多的,然后输出路径。<br /> <br />题目中最困难的是,找到所有路径,并找出符合题意的那个。。。<br /> <br />我的算法是先找出来一条最短路径,然后再这条路径上进行扩展,凡是符合这个条件的“dist[j] == dist[now] + mat[now][j]”,都可能作为最短路径的分支。可以求出到达每个点的的javabean记录下来,找到一个更长的就更新路径和javab原创 2010-08-22 23:56:00 · 749 阅读 · 0 评论 -
ZOJ 1655 Transport Goods (杀入ranklist1000,撒花)
<br />这可以归结为单终点最短路径,然后变为单源的。<br /> <br />每个城市的货物运送到首都之后都不同程度减少,是原来货物的dist[i]倍。刚开始dist初始化为0,起点为1,每走一段路就乘以这段路的(1-rate),每次总是把最大的放到集合S中,英文之后的dist都比他小,不可能改变她的值。最后每个点的货物量乘以剩余率就OK!~<br /> <br />#include<stdio.h> #include<math.h> const double eps = 1e-6; int N,原创 2010-08-20 19:08:00 · 835 阅读 · 7 评论 -
ZOJ 2504 Help John! (dijkstra)
<br />我感觉这个题的叙述有问题。<br /> <br />john他妈给他说了一条路线,但是他想走更短的。但是他走出去的第一条路必须是她妈说的,剩下的就随便走了。<br />他如果找不到可以到达的路的话,就输出N。<br /> <br />数据也很弱,我的程序漏洞百出也能过。<br /> <br />#include<stdio.h> #include<math.h> const int INF = 99999990; int t,n,r,w,m; int from,to,now; int原创 2010-08-20 19:01:00 · 493 阅读 · 0 评论 -
ZOJ 1544 / POJ 1860 Currency Exchange(bellman-ford)
<br />具体的我就不解释了,网上有很详细的。、<br />http://www.cppblog.com/MemoryGarden/archive/2008/09/04/60912.html<br /> <br />“ 题意 : 就是套汇的问题,汇率Rab, 增加了一个手续费 Cab 。。。。。。。每次的结果是 (本金 - 手续费) * 汇率,而且一个人拥有的钱的类型是已知的,拥有的value 钱的个数也是已知的, 问你能不能增值。<br /><br /><br /><br /> 输入 :3 2原创 2010-08-19 12:46:00 · 1202 阅读 · 3 评论 -
ZOJ 1952 Heavy Cargo (dijkstra )
<br />又一次深刻的理解了dijkstra,他的各种变形可以解决各种各样的问题,有时候我们用dij不仅可以求出最小值,也可以求出符合要求的最大值。只要之后更新的东西不会改变已经加入到集合S中的点 。<br /> <br />#include<stdio.h> #include<math.h> #include<string.h> #define INF 99999999 int count = 0; char name[201][40]; int find(char *a) {原创 2010-08-20 09:05:00 · 621 阅读 · 0 评论 -
ZOJ 1942 / POJ 2253 Frogger (dijkstra)
算是最短路径的一种变形。也就是松弛操作中那个运算变化了,这一点还需要通过做题慢慢理解。#include #include const double eps = 1e-8; #define INF 999999999 struct stone { int x,y; } stones[201]; int main(void) { int flag[201]; double dist[201]; double mat[201][201]; int原创 2010-08-19 19:19:00 · 1548 阅读 · 1 评论 -
ZOJ 1092 Arbitrage (floyd变形)
<br />给出各种货币的汇率,你可以在各种货币之间转换,看能不能用某种交换方法,能使你最终得到的钱比刚开始得多,当然是同一种货币的时候。<br /> <br />如果平常做最短路径肯定不知道可以用floyd来做,我之前看了一个paper,上面说到,松弛过程中的<br /> <br /> d[v] < d[u] + w(v,u)<br /> <br />这里面的加号可以延伸为各种形式的运算的,当时没注意,想到应该没有什么用,碰巧在这道题中floyd也可以变换符号。。挺神奇的,原创 2010-08-08 13:32:00 · 598 阅读 · 0 评论 -
ZOJ 1589 Professor John (图的传递闭包)
<br />给出几个变量的相互大小关系,要求输出能推出来的关系。<br /> <br />显然大小关系只有一种,大于或者小于,所以是都是单向的。计算完闭包之后与原来的比较,多出来的就是推出来的关系。<br /> <br />这题竟然一次就编译成功而且一次AC。。。哈哈,庆祝。。<br /> <br />#include<stdio.h> #include<string.h> #include<stdlib.h> int main(void) { int mat1[27][27],mat2[27]原创 2010-08-06 17:42:00 · 526 阅读 · 0 评论 -
POJ 2607 / ZOJ 1857 Fire Station (临接表+spfa)
噩梦。。真是噩梦,GB同学给初学者留下的这个任务,显然有点高估我们的实力了。我做这道题的时候是一波N折,先后产生了五个版本,现在我的思考过程以及代码都弄出来,大家借鉴一下:1、刚开始是最最原始的方法,dijkstra暴力求解,显然效率是非常低的,在本机上跑了9s,简单优化一下,八秒。。然后就再也没有提升的空间了。ps:在网上搜索到了测试数据,经验证,和浙大的数据完全一样,但是poj上的就不一样,我估计是poj上删掉了某组数据,而且他上面的时间限制是5s,在zoj上是1s。。2、在网上看优先队列可以优化,我又原创 2010-08-03 13:35:00 · 1224 阅读 · 0 评论 -
ZOJ 1891 Subway (dijkstra)
<br />从家走到学校,怎样时间最短?<br /> <br />有两种行进方式,走路,坐地铁,他们的速度不一样(注意在运算的时候要变换单位,题目求的时间是分钟,而且题目给的坐标是以米为单位,不是千米)。给出几条地铁线路和他们的节点,相邻节点之间肯定做地铁,然后把走路的路线弄出来,非地铁路线均是走路路线。。。。然后dijkstra。。。就OK了、<br /> <br />#include<stdio.h> #include<math.h> #include<string.h> struct point原创 2010-07-30 20:07:00 · 822 阅读 · 0 评论 -
ZOJ 1456 Minimum Transport Cost (dijkstra+dfs)
如果只求最短路径,那么这个题水的不能再水了,淡关键是他还要输出字典序最短的最短路径,这不知难倒了多少人。刚开始的时候,我想要把说有的最短路径都找出来,但是找不到合适的方法,未果。之后某媛提示可以用dfs去找所有路径,,,恍悟~dfs在找路径的时候每次都是从最字典序小的那个开始,所以当你找到一条符合题意的最短路径的时候,它一定就是我们需要的路径。其中只需要一个数组去储存路径信息。当第一次搜索到合适的时候就输出。需要注意的地方:1、输出时候有无数个空格,要注意是否一致。我因此WA了一次。2、每个城市 i 通过也原创 2010-07-31 15:12:00 · 1487 阅读 · 8 评论 -
POJ 1135/ZOJ 1298 Domino Effect (最短路径dijkstra)
给出多米诺骨牌的节点和节点间走完需要的时间,判断从第一个节点开始,他们是怎么样全部倒完的。用dijkstra求出最短路径,遍历所有的边,若| dist[i] - dist[j] | 输出两个点中间结束的情况时,两个点从小到大。我的感觉:1.cout真是不好用 2.最近狂掉人品中,勿扰。。,,#include #include #include #include using namespace std; const int INF = 9999999; int main() { int原创 2010-07-30 14:09:00 · 963 阅读 · 1 评论 -
ZOJ 3166 Lazy Tourist
<br />有N个景点,其中C个景区有旅馆,求一个起点终点是旅馆的环,输出这个旅馆。。<br /> <br />我还在理解中,话说这个题描述不清楚。。<br /> <br />#include<stdio.h> #include<string.h> #include<stdlib.h> const int INF = 999999999; int mat[101][101]; int hot[101]; int main(void) { int n,c,i,t,k,j,m;原创 2010-10-10 22:52:00 · 861 阅读 · 0 评论