时间复杂度:O(n³)
#include <iostream>
#define INF 999
using namespace std;
const int n=3; // 假设图中最多顶点个数
int arc[n][n] = {{0,4,11},{6,0,2},{3,INF,0}};
int dist[n][n] = {0};
void Floyd(int arc[n][n],int dist[n][n])
{
// 初始化矩阵dist
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
dist[i][j] = arc[i][j];
// 进行n次迭代(每次增加一个点,依次更新)
for(int k=0;k<n;k++)
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(dist[i][k]+dist[k][j]<dist[i][j])
dist[i][j] = dist[i][k]+dist[k][j];
}
void display(int dist[n][n])
{
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
cout<<dist[i][j]<<" ";
cout<<endl;
}
}
int main()
{
Floyd(arc,dist);
display(dist);
return 0;
}