这题算是https://blog.csdn.net/chaochen1407/article/details/82720327 的延伸。相当于那一题加了两个限定条件:1. 1本身不能成为聚集点。2.多了2这个数字代表obstacle。
加了这两个限定条件,就没办法采取那道题目的最优解决法了。目前所知的最优解就是遍历bfs。就是以每个building为起始点,然后往外bfs,对每个能达到的点进行叠加计算。如果存在某个点有building无法到达,那么以后这个点都会被忽略,可以认为这是一种截枝处理。最后遍历计算过的点,从中找到最小的叠加值(如果存在的话)。并不是很难的bfs。下面给出代码:
public static int[][] DIR = {
{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
public int shortestDistance(int[][] grid) {
int[][] total = new int[grid.length][grid[0].length];
int[][] marker = new int[grid.length][grid[0].length];
int buildCnt = 0;
for (int i = 0; i < grid.length; i++) {