随笔分类 -  最短路

poj-3072 Robot ***
摘要:/* * Graph-poj-3072.cpp * * Created on: 2011-11-20 * * dijkstra.. * * 分别用 STL 的 heap操作 和 普通的数组操作 实现 * * */#include <cstdio>#include <cmath>#include <cstring>using namespace std;const int maxn = 20 + 2;const double pi = atan(1.0) * 4;const double eps = 1e-9;const double inf = 100000 阅读全文

posted @ 2011-11-20 13:28 龙豆 阅读(1176) 评论(0) 推荐(0) 编辑

CTSC1999 rescue
摘要:原题:http://codewaysky.sinaapp.com/problem.php?id=1055 题目描述1944年,特种兵麦克接到国防部的命令,要求立即赶赴太平洋上的一个孤岛,营救被敌军俘虏的大兵瑞恩。瑞恩被关押在一个迷宫里,迷宫地形复杂,但是幸好麦克得到了迷宫的地形图。 迷宫的外形是一个长方形,其在南北方向被划分为N行,在东西方向被划分为M列,于是整个迷宫被划分为N×M个单元。我们用一个有序数对(单元的行号,单元的列号)来表示单元位置。南北或东西方向相邻的两个单元之间可以互通,或者存在一扇锁着的门,又或者存在一堵不可逾越的墙。迷宫中有一些单元存放着钥匙,并且所有的门被分为 阅读全文

posted @ 2011-11-17 19:59 龙豆 阅读(550) 评论(0) 推荐(0) 编辑

poj-1062 昂贵的聘礼 **
摘要:/* * 最短路, Dijkstra(数组实现) * * 建图 : 若 物品u 能用物品 v 再加 钱 a 交换, 则 边权值w(v,u) = a * 初始: d[i] = 物品i的直接价格 * * 注意等级的限制, 酋长的等级不一定是最高的~ 应枚举等级的范围,起点不在范围内的边不能松弛~ * * */#include <cstdio>#include <cstring>using namespace std;const int inf = 10000000;const int maxN = 100 + 5;int m, n, r[maxN], d[maxN];boo 阅读全文

posted @ 2011-09-03 15:55 龙豆 阅读(333) 评论(0) 推荐(0) 编辑

poj-1125 Stockbroker Grapevine *
摘要:/* * 水题~ floyd算法 0ms * * 求每对顶点间的最短路, 然后选择 最大值 最小的那个顶点作为起点~ */#include <cstdio>#include <cstring>using namespace std;const int maxN = 100 + 5;const int inf = 10000000;int n, totEdgeNum, w[maxN][maxN];/*struct SEdge{ int u, v, w;};SEdge edge[maxN * maxN];*/void floyd(){ for(int k=1; k<= 阅读全文

posted @ 2011-09-03 14:18 龙豆 阅读(211) 评论(0) 推荐(0) 编辑

poj-3259 Wormholes **
摘要:/* * Bellman_Ford 判断负环 * * 注意可能有平行边,只需保留最小的权值 * * 【转】 * 此题虽然是最最基础的bellman_ford,但用来加深理解还是可以的: * 1)bellman_ford 究竟要relax多少次,当从1到n存在且存在1 -> 2, 2 -> 3 ...n-1 -> n这样的边时, * 从1开始relax,到n显然是需要n-1次的,而如果其中存在负环的话,若relax次数大于n-1,总是存在新的可以收缩的点, * 因此最科学的次数是先做n-1次,再做第n次: * 如果n-1次relax... 阅读全文

posted @ 2011-09-03 11:06 龙豆 阅读(252) 评论(0) 推荐(0) 编辑

poj-1860 Currency Exchange **
摘要:/* * 汇率问题: Bellman_Ford算法 , 判断正环 * * 有个奇怪的问题: 如果把 d[i]初始化为 -inf 则 WA, 初始化为 0 或 -100 之类的值则AC~ 奇怪 */#include <iostream>#include <cstring>using namespace std;const int maxN = 100 + 5;int n, m, s;double v, r[maxN][maxN], c[maxN][maxN], d[maxN];void ini(){ for(int i=1; i<=n; i++) d[i] = 0; 阅读全文

posted @ 2011-09-02 22:32 龙豆 阅读(315) 评论(0) 推荐(0) 编辑

导航

点击右上角即可分享
微信分享提示