迪杰拉斯算法:单源-----[O(n^2)] 全图-----[O(n^3)]
需要构造结点去记录信息:该点下标,起始点到该点花费多少,该点其来源点。通过优先队列排列起始点到其他点的花费,来获得现阶段到该点的最短路径,则为实际的最短路径。通过设置visited标记是否已经找到最短,则在队列中拥有相同下标的点无效。同时用数组记录所有点的father,最后直接通过回溯求得路径。
佛洛依德算法:[O(n^3)]
无需其他内容,直接三层循环,k,i,j arr[i][j] = min(arr[i][j],arr[i][k]+arr[k][j]),来获得最短路径,同时使用arr<string>来获得路径。注意路径重叠处应该消去。
网友评论