重要的事情说三遍
仔细看题!!!
仔细看题!!!
仔细看题!!!
众所周知,在最短路径有三种比较经典的算法,Floyd,SPFA,dijkstra这三种算法各有各的好处,比如在不优化的情况下,dijkstra用来处理稠密图就优于SPFA,而稀疏图反之。而Floyd则可以用来处理多源最短路径。
Floyd算法是最短路的一一种利用dp思想来求多点对多点的算法。基本的思想就是先枚举一个中间点,在枚举两个端点,判断两个端点中间,是否存在这两个端点分别到这个中间点的距离相加小于这两个点之间的当前最短路径,说明当前的路径是最短路径,更新就好了——该操作也被称为松弛操作。
Floyd的板子如下:
void Floyd(){ if(n<3)return ; for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) maps[i][j]=min(maps[i][j],maps[i][k]+maps[k][j]); }
现在给你一个有n个点的图,请你计算使用Floyd算法会使用多少次min函数
多组输入,每组数据1<=n<=1e6.
每组输出一个答案
3
27