最短路总结

POJ 1502

基本dijkstra,主要是输入如何判断是x还是整数,输入要用字符串,如果不是x就用atoi函数转换成整数即可

POJ 2240

这题用贝尔曼福德判断有正环即可,看点是用字符串和一个整数匹配,用map<string,int> name;然后name[string(s)]就是字符串s对应的整数了。

POJ 2387

有重边,判断再赋值即可,赤裸dij,其实以后题目没说有重边都可以把它当成有重边来做,那样就保证了。

POJ 3259

直接贝尔曼福德判断是否有负环。

POJ 2502

简单dijkstra水之。

POJ 1511

本人认为这题是最短路的一个突破,从原来的dij,bellman和floyd,前面的最短路都可以用这3个算法做,但这题数据规模大,用不优化的算法会超时,例如bellman无论如何,效率都是(n-10)*m,当是稀疏图 例如<1,2>,<2,3>,<3,4>,<4,5>这种线性图的话,其实一次循环就已经把所有点初始化了,但是由于负环的存在,使得后面做的都是“无用功”,对于这种稀疏图,用SPFA的效率优势就体现出来了,还有题目的点数庞大,就不能用邻接矩阵了,要用邻接表,况且对于稀疏图,邻接表的空间效率也是远大于邻接矩阵,我是用前向星储存的,也很好。

POJ 2394

数据不大,赤裸dij

POJ 3660

转化为floyd,也就是任何一个点,如果跟其他任何一个点要不就是被打败,要不就是打败它就可以被确定排名。

POJ 3615

floyd,判断上微小变化而已

你可能感兴趣的:(最短路总结)