1.题目描述:点击打开链接
2.解题思路:本题的解题过程类似于Floyd算法的原理,即:任意一条至少包含两条边的路径,一定存在一个中间点k,使得d(i,j)=d(i,k)+d(k,j),其中d(i,j)表示(i,j)的最短长度,对于不同的点k,d(i,k)+d(k,j)可能不相同,因此最后要取最小值。对于本题,即max(d[i][k],d[k][j])可能不同,因此最后要取最小值。所以,只需要把Floyd算法的最后一句修改为d[i][j]=min{d[i][j],max(d[i][k],d[k][j])}即可。
3.代码:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std