每对顶点之间的最短路径

我怕爱的太早我们不能终老 提交于 2019-12-04 13:08:05

Floyd

void Floyd(MatGraph g)
{
    int A[MAXV][MAXV];
    int path[MAXV][MAXV];
    int i, j, k;
    for (i = 0; i < g.n; i++)
    {
        for (j = 0; j < g.n; j++)
        {
            A[i][j] = g.edges[i][j];
            if (i != j && g.edges[i][j] < INF)
                path[i][j] = i;
            else
                path[i][j] = -1;
        }
    }
    for (k = 0; k < g.n; k++)
    {
        for (i = 0; i < g.n; i++)
        {
            for (j = 0; j < g.n; j++)
            {
                if (A[i][j] > A[i][k] + A[k][j])
                {
                    A[i][j] = A[i][k] + A[k][j];
                    path[i][j] = path[k][j];
                }
            }
        }
    }
 
}

  

void Dispath(MatGraph g, int A[][MAXV], int path[][MAXV])
{
    int apath[MAXV], d;
    int i, j, k;
    for (i = 0; i < g.n; i++)
    {
        for (j = 0; j < g.n; j++)
        {
            if (A[i][j] < INF && i != j)
            {
                printf("从%d到%d的路径为:", i, j);
                d = 0;
                apath[d] = j;
                k = path[i][j];
                while (k != -1 && k != i)
                {
                    apath[++d];
                    k = path[i][k];
                }
                apath[++d] = i;
                printf("%d", apath[d]);
                for (k = d - 1; k >= 0; k--)
                    printf(",%d", apath[k]);
                printf("\t路径长度为:%d\n", A[i][j]);
            }
        }
    }
}

  

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!