稍微改变即可求传递闭包,即关心两点之间是否有同路:

for(int i=0;i<n;i++)
   for(int j=0;j<n;j++){
        if(i==j)
          d[i][i]=0;
        else 
            d[i][j]=INF;
   }
   for(int k=0;k<n;k++)
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    if(d[i][k]<INF && d[k][j]<INF)
    d[i][j]=min(d[i][j],d[i][k]+d[k][j]);