floyd算法求最短路径,哪儿错了呢

2025-04-30 02:14:43
推荐回答(1个)
回答1:

#include
#define N 105
void Floyd(int D[][N],int n)
{
    int i,j,k;
    printf("----------------------1\n");
    for(k=0; k        for(i=0; i            for(j=0; j                {
                if(D[i][j]==-1) 
                    D[i][j]=D[i][k]+D[k][j];
                else  if(D[i][k]!=100&&D[k][j]!=100&&D[i][j]>D[i][k]+D[k][j])
                    {
                            D[i][j]=D[i][k]+D[k][j];

                    }
                }
}
int main()
{
    int D[N][N],n,i,j;
    printf("顶点个数:");
    scanf("%d",&n);
    printf("顶点距离(距离在1~99,100表示无穷):\n");
    for(i=0; i        for(j=0; j            scanf("%d",&D[i][j]);
    Floyd(D,n);
    for(i=0; i    {
        for(j=0; j            printf("%3d ",D[i][j]);
        printf("\n");
    }
}

没啥大的问题,就是需要都判断一下D[i][k]和D[k][j]是否是无穷大的,如果是有就需要跳过了。

希望以上内容可以对你有所帮助,望采纳~~