Floyd是求多源的最短路径,是动态规划算法的一种。
Floyd算法的基本思想如下:从节点A到任意节点B的最短路径,直接从A到B,或者从A经过若干个节点X到B。所以,假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,检查Dis(AX) + Dis(XB) < Dis(AB)是否成立,如果成立,证明从A到X再到B的路径比A直接到B的路径短,便设置Dis(AB) = Dis(AX) + Dis(XB),这样一来,当遍历完所有节点X,Dis(AB)中记录的便是A到B的最短路径的距离。
void floyed(int arrDis[][MAX_VERTEX_COUNT], int arrPath[][MAX_VERTEX_COUNT], int nVertexConut){
for(int i=0; i<nVertexConut; i++){
for(int j=0; j<nVertexConut; j++){
arrPath[i][j]=i;
}
}
for(int k=0; k<nVertexConut; k++){
for(int i=0; i<nVertexConut; i++){
for(int j=0; j<nVertexConut;j++){
if(arrDis[i][k]+arrDis[k][j]<arrDis[i][j]){
arrDis[i][j] = arrDis[i][k] + arrDis[k][j];
//arrPath[i][j] = arrPath[k][j];
}
}
}
}
}