2014年4月1日
摘要: 一、Prim算法参考之前的博文:http://www.cnblogs.com/Oloo/articles/3631631.html二、问题描述2485和1258题目基本一致,唯一的区别就是2485需要注意的一个地方,不然会耗时很长,详见下面的注意。3026题相比上两题来说,多了一个困难就是构造图,边的权重需要我们想办法求出来。参见下面的问题分析。POJ2485:http://poj.org/problem?id=2485POJ1258:http://poj.org/problem?id=1258POJ3026:http://poj.org/problem?id=3026前两道题题意一看就知道是 阅读全文
posted @ 2014-04-01 10:24 Oloo 阅读(151) 评论(0) 推荐(0)
  2014年3月28日
摘要: 一、Prim算法算法描述:算法过程与Dijskstra算法基本一致,只有一点不同,就是Dijskstra执行Relax操作的地方,使用相应的边的权重来更新相应点的D值。参考《算法导论》23章最小生成树Prim算法部分二、问题描述POJ1789:http://poj.org/problem?id=1789卡车的牌照标识一般是从一种牌照演化到另一种,现在历史学家要研究牌照演化的进程,给定一组卡车牌照,写个程序帮历史学家找出牌照演化的最小生成树。四、问题分析编程之前需要解决一个问题:问题一、图的构造?问题一:这道题目图的构造还是不算难的!以每种卡车牌照为节点,任意一种牌照到其他牌照都有边,边的权重, 阅读全文
posted @ 2014-03-28 22:41 Oloo 阅读(170) 评论(0) 推荐(0)
摘要: 一、说明POJ1789这道题目看完题意之后,因为每个顶点到其他所有顶点都有边,所以这个问题显然是个稠密图,对于稠密图显然Prim更快,而且,如果细细分析之后,会发现Prim不仅仅是比Kruskal快哟,关键是省去了巨大内存空间。关于这个道题用Prim并且考虑内存节省的题解,参见我的博文: http://www.cnblogs.com/Oloo/articles/3631631.html二、Kruskal算法算法描述:将边按照升序排序,然后按照这个顺序依次取边,判断符不符合加入条件,如果符合,则把这条边的两个顶点合并成一个set,不符的话,取下一条边,重复上述过程。上面描述中的判断条件是,两个. 阅读全文
posted @ 2014-03-28 20:38 Oloo 阅读(192) 评论(0) 推荐(0)
  2014年3月24日
摘要: 一、Floyd-Warshall算法我第一次接触这个算法是通过《算法导论》,感觉这里写的还是很好的!不愧是MIT《算法导论》在介绍这个算法之前,写了一个小引子——利用矩阵乘法的思想解决每对顶点间的最短路问题,通过对比这个引子和Floyd-Warshall算法,就会发现有时候自然的规律就是这么简单,和我们普通人稍微动一下脑袋得出的结论其实就差了那么一点儿!1、引子部分的思想一句话概括要求i到j的最短路V(i,j),可以看成是求所有的i到j经过N-1条边的路径中最短那一条。那么我们如何求解i到j经过k条边的最短路呢?分为两种情况,第一种,i到j经过k条边的最短路等于i到j经过k-1条边的最短路。V 阅读全文
posted @ 2014-03-24 14:49 Oloo 阅读(184) 评论(0) 推荐(0)
  2014年3月23日
摘要: 一、Dijskstra算法参考我之前一篇博文:http://www.cnblogs.com/Oloo/articles/3614810.html或者《算法导论》第24章单源最短路Dijskstra算法部分二、问题描述POJ2253:http://poj.org/problem?id=2253一共有两只青蛙,分别位于湖中两块不同的石头上,一只青蛙想要跳到另一只青蛙那里,通过湖中的石头。现在给出湖中石头的坐标,要求青蛙至少每次能跳多远,才能顺利到达另一只青蛙那里。三、问题分析编程之前需要解决三个问题:问题一、图的构造?问题二、单源最短路or每对顶点间最短路/BellmanFordorDijskst 阅读全文
posted @ 2014-03-23 12:53 Oloo 阅读(240) 评论(0) 推荐(0)
  2014年3月22日
摘要: 一、BellmanFord算法参考我之前一篇博文:http://www.cnblogs.com/Oloo/articles/3612366.html或者《算法导论》第24章单源最短路bellmanford部分二、问题描述POJ3259:http://poj.org/problem?id=3259有F个农庄。对于每个农庄有N块田,有M条路分别连接两块田,这M条路是双向的,有W个虫洞,每个虫洞连接两块田,但是是单向的。对于每个农场判断,存不存在一个点,从该点出发,经过虫洞和一系列路径可以回到该点,看到以前的出发时候的自己。三、问题分析编程之前需要解决两个问题:问题一、图的构造问题二、目标转换问题一 阅读全文
posted @ 2014-03-22 12:48 Oloo 阅读(137) 评论(0) 推荐(0)
  2014年3月20日
摘要: 一、Dijskstra算法首先Dijskstra算法和bellmanFord算法相比多了一个要求:边的权值为非负。Dijskstra算法其实是一种贪心算法,一般地,贪心算法不能保证找到全局最优点。但是Dijskstra正是充分利用了边的权值非负这一点,进而保证所求结果是全局最优的。关于Dijskstra的正确性证明,可以参见《算法导论》24章单源最短路一章关于Dijskstra的部分,正确性证明看起来还是挺顺的~二、问题描述POJ1062:http://poj.org/problem?id=1062因为是少见的中文题,所以题意就略了。三、问题分析编程之前需要解决两个问题:问题一、图的构造问题二 阅读全文
posted @ 2014-03-20 22:58 Oloo 阅读(411) 评论(0) 推荐(0)
  2014年3月19日
摘要: 一、BellmanFord算法 由n个点组成图,从一点v0到一点vn的最短路p,p最多由n-1条边组成。 现在有一定理: 设P={(v0,v1),(v1,v2),.....,(vn-1,vn)}为v0到vn的最短路,其中(vi,vj)表示从vi到vj的边,如果,我们能够保证按照P中的这些边的排列顺序来对每个边进行Relax操作,那么由此计算出的D[vn]即为v0到vn的最短路的长度。 bellmanFord算法,就是以上面这个定理为基础。bellmanFord通过对每条边Relax n-1次来保证上面定理的条件,进而得到v0到vn的最短路的长... 阅读全文
posted @ 2014-03-19 21:35 Oloo 阅读(148) 评论(0) 推荐(0)
  2014年3月18日
摘要: 一、问题描述 POJ_1094:http://poj.org/problem?id=1094 输入: 给定字母个数n(从A开始计数),给定偏序关系个数 下面是一系列偏序关系 输出: 分为3种 1、在第i个关系之后,找到唯一的拓扑排序序列 2、拓扑排序不唯一 3、在第i个关系之后,发现圈 二、需要解决的问题 问题有3个: 第一个问题:怎么确定加入第i个关系出现回路? 解决办法之一:首先,判断一个图是不是有回路的方法是,把DFS稍加修改,在从... 阅读全文
posted @ 2014-03-18 11:57 Oloo 阅读(187) 评论(0) 推荐(0)
  2014年3月15日
摘要: 一、问题描述 ZOJ 1003:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1003 标号为1~100的100个气球,两个人来踩气球,每个人初始分数为1,没踩破一个气球,则乘以该气球的数字。最后,两个人报出自己的分数。低分者要质疑高分者的分数,如果证实高分者的分数和低分者的分数矛盾,则低分者赢,否则高分者赢。 矛盾的意思就是两者分数不能仅使用1~100内的不同的数字作为因子乘出。 二、解题思路 使用回溯法。从100开始,尝试来先分解较小的数,直到分解完成或者分解失... 阅读全文
posted @ 2014-03-15 23:11 Oloo 阅读(573) 评论(0) 推荐(0)