稍微改变即可求传递闭包,即关心两点之间是否有同路:
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]);
浙公网安备 33010602011771号