题意
有两个虫洞,抵达一个可以瞬间到达另一个,现在问可以任意放置虫洞,求两点之间任意位置的最短路径。
思路
一开始用二分+优先队列TLE了。。
因为这题没有障碍物,所以可以不用搜索,直接计算。
枚举两个虫洞的位置,枚举起点和终点。
起点到终点有三种方式:
1. 直接到。
2. 起点→虫洞1→虫洞2→终点
3. 起点→虫洞2→虫洞1→终点。
只要把这三种方式的路径长度算出来取最小值即可。
代码
class PublicTransit {
int row, col;
int dis(int a, int b, int aa, int bb)
{
return abs(a-aa) + abs(b-bb);
}
public:
int minimumLongestDistance(int R, int C) {
row = R, col = C;
int ans = INF;
FOOR(i, 1, row) FOOR(j, 1, col) FOOR(ii, 1, row) FOOR(jj, 1, col)
{
int curAns = 0;
FOOR(k, 1, row) FOOR(l, 1, col) FOOR(kk, 1, row) FOOR(ll, 1, col)
{
int d1 = dis(k, l, kk, ll);
int d2 = dis(k, l, i, j) + dis(ii, jj, kk, ll);
int d3 = dis(k, l, ii, jj) + dis(i, j, kk, ll);
curAns = max(curAns, min(d1, min(d2, d3)));
}
ans = min(ans, curAns);
}
return ans;
}
};