天天看点

POJ3259 Wormholes (Bellman-Ford最短路径算法)

本文出自:

原题:

题意:最基础的bellman-ford题目,寻找负环.告诉你有几个村庄,在村庄中有通路,通路走过去花费时间,通路是双向的,走虫洞可以使时间倒退,即负边.但是负边是单向的.

总结写在最前面:

bellman-ford算法最关键就在于判断有无负环;

bellman-ford算法刚刚自学,还不是很明白.一开始觉得使用邻接矩阵即可,想松弛n-1次以后看看还能不能再松弛,如果可以松弛说明有负环.一开始不过,心中甚是郁闷--(手懒不想写结构体..)实在无奈用了邻接表的形式(这才发现多写不了多少东西,输入的时候多加注意即可..)依然WA--这才好好看看了看..

问题在于:邻接表是对边处理,邻接矩阵则是对点处理.

在进行松弛操作的时候边的个数搞错了-=应该是m*2(双向边)+w(虫洞边)这才是最后的结果..也明白邻接表的速度要比邻接矩阵快的多..o(n^2)和O(n^3)明显不是一个级别--因此稀疏图还是要用邻接表.为了测试一下想法重写了邻接矩阵的算法,果然time limit exception...不死心的我剪了剪枝还交了两次呵呵果然==再一次..

终于大彻大悟写了AC代码:

继续阅读