最短路---Floyd
全源最短路:Floyd(读音:弗洛伊德)
图论,最基础的就是最短路了;
最短路,最基础的就是Floyd了;
(没错学长又可以退场了)
应该是有个叫Floyd的人发明的
因为简单所以不想写太多……
松弛都知道是啥。不知道的……退役吧……
那么我们枚举中转站,枚举起点和终点,O(n\(^3\))
就是说由点i到点j要是需要经过点k的话,最短路径长度是多少
如果得到的长度比点i,j本来的距离短,就更新dis[i][j]; 否则不管;
当然了,我们枚举的k,i,j是三个不同的点,如果枚举的时候有两个点相同
那就不用算了
代码如下:
int dis[MAXN][MAXN];
memset(dis,0x3f,sizeof(dis))//初始化无限远,0x3f保证相加不会溢出
for(int k=1;k<=n;k++)//枚举中间点
for(int i=1;i<=n;i++)//枚举起点
if(k!=i)//判重
for(int j=1;j<=n;j++)//枚举终点
{
if(i==j||j==k)continue;//依旧判重
if(dis[i][k]+dis[k][j]<dis[i][j])
dis[i][j]=dis[i][k]+dis[k][j];
}
很简单对吧~~