#include<iostream>
using namespace std;
int a[10][10];  //存储点与点之间的距离
int n;          //顶点数
int e;          //边数
const int inf=999999999;    //无穷大
int x,y,z;      //x到y的距离为z
int i,j,k;      //循环变量

void Create()
{
    cin>>n>>e;
    //初始化邻接矩阵
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
        {
            if(i==j)
                a[i][j]=0;
            else
                a[i][j]=inf;
        }

    for(i=1; i<=e; i++)
    {
        cin>>x>>y>>z;   //将x,y之间的距离置为z
        a[x][y]=z;
    }
}

void Floyd()
{
    for(k=1; k<=n; k++)         //进行n次迭代
        for(i=1; i<=n; i++)
            for(j=1; j<=n; j++)
            {
                if(a[i][k]<inf && a[k][j]<inf && a[i][j]>a[i][k]+a[k][j])//k为通过哪个点
                    //a[i][k]<inf&&a[k][j]<inf是防止a[i][k]+a[k][j]超出了int的最大范围
                    a[i][j]=a[i][k]+a[k][j];//通过其他点可以找到更短的路径
            }

    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(i!=j)
                cout<<i<<"号城市到"<<j<<"号城市最短路径为:"<<a[i][j]<<endl;
}

int main()
{
    Create();
    Floyd();
    return 0;
}
测试数据:
4 8
1 2 2
1 3 6
1 4 4
2 3 3
3 1 7
3 4 1
4 1 5
4 3 12