floyd算法是一个很强大的算法,它可以计算任意两点之间的最短路径,其边可以为负值。时间复杂度n^3
1 void floyd() 2 { 3 int k,u,v; 4 for(k=0;k<G.vunm;k++) 5 for(u=0;u<G.vunm;u++) 6 for(v=0;v<G.vunm;v++) 7 { 8 if(D[u][v]>D[u][k]+D[k][v]) 9 { 10 D[u][v]=D[u][k]+D[k][v]; 11 } 12 } 13 printf("%d\n",D[s][t]==MAX?-1:D[s][t]); 14 }
Floyd 模板
补充一下:对于floyd判断负环是否存在只需检查是否存在d[i][i]是负数的顶点i 即可
时间: 2024-11-01 21:31:42