Floyd算法是用于求解所有点对之间的最短距离,如果只需要求一个起点到所有其他点的最短距离应该使用Dijstra算法。
Floyd核心Logic
注:m[f][t] 意为 从f出发到t点的距离. 输入可能是边的形式或者是图的形式,需要灵活处理。
for(int k=1;k<=n;k++)
{
for(int f=1;f<=n;f++)
{
for(int t=1;t<=n;t++)
{
if(f==t||f==k||t==k) continue;
if(m[f][k]!=INF&&m[k][t]!=INF)
{
int total=m[f][k]+m[k][t];
if(total<m[f][t]||m[f][t]==INF)
{
m[f][t]=total;
}
}
}
}
}