#include
#define N 105
void Floyd(int D[][N],int n)
{
int i,j,k;
printf("----------------------1\n");
for(k=0; kfor(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; ifor(j=0; j scanf("%d",&D[i][j]);
Floyd(D,n);
for(i=0; i{
for(j=0; jprintf("%3d ",D[i][j]);
printf("\n");
}
}
没啥大的问题,就是需要都判断一下D[i][k]和D[k][j]是否是无穷大的,如果是有就需要跳过了。
希望以上内容可以对你有所帮助,望采纳~~