最短路---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];
          }

很简单对吧~~

posted @ 2021-11-16 16:34  Konnya_ku  阅读(80)  评论(0编辑  收藏  举报