迪杰斯塔拉算法和弗洛伊德算法功能室求解出有向图或无向图中最短路劲的方法。
迪杰斯特拉大致思想就是依次选择与源点最近的相邻点,然后将相邻点也加入考虑范围(可以经过相邻点),继续计算其他相邻点到远点距离。重复此过程,最终计算出源点到其他点的距离。
例如上图,考虑从V0出发,(-)代表目前无法计算
v0(0) | v1(5),v2(2),v3(4),v4(-),v5(-),v6(-) |
v0(0),v2(2) | v1(5),v3(3)v4(-)v5(3),v6(-) |
v0(0),v2(2),v3(3) | v1(5),v4(-),v5(3),v6(9) |
v0(0),v2(2),v3(3),v5(3) | v1(5),v4(-),v6(9) |
v0(0),v2(2),v3(3),v5(3),v1(5) | v4(8),v6(9) |
v0(0),v2(2),v3(3),v5(3),v1(5),v4(8) | v6(9) |
v0(0),v2(2),v3(3),v5(3),v1(5),v4(8),v6(9) |
弗洛伊德算法大致思想是遍历,先将A到B的权值计算出来,然后经过多层遍历,查看是否有例如A到C到B距离会比A到B更短,此方法用于计算出任意亮点的最短距离。
从图中可以清楚看出2到3之间的距离为4,要求2到3最短距离,对路径进行遍历
for (i = 0 ; i < n ; i ++){
for (j = 0 ; j < n ; j ++ ){
for (k = 0 ; k < n ; k ++){
if(e[k][j] > e[k][i]+ e [i][j])
e[k][j] = e [k][i] + e[i][j];
}
}
}
求得最短距离2到4到3为2.