Floyed
多源最短路,Floyed本质是dp,通过不断的松弛操作来获得最优,时间复杂度O(N^3)。
memset(w,0x3f,sizeof(w));/*初始化正无穷*/
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)cin>>w[i][j];
for(int i=1;i<=n;i++)w[i][i]=0;/*自己到自己的距离为0*/
for(int k=1;k<=n;k++){/*在最外层枚举中转点*/
for(int i=1;i<=n;i++){
if(i==k)continue;
for(int j=1;j<=n;j++){
if(i==j||j==k)continue;
w[i][j]=min(w[i][j],w[i][k]+w[k][j]);
}
}
}
Floyed可以用来传递闭包,即判断一点是否可以到达另一点。
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
if(i==k)continue;
for(int j=1;j<=n;j++){
if(i==j||j==k)continue;
w[i][j]|=w[i][k]&w[k][j];
}
}
}