其他分享
首页 > 其他分享> > #295. 「BJWC2010」矩阵距离 题解

#295. 「BJWC2010」矩阵距离 题解

作者:互联网

# #295. 「BJWC2010」矩阵距离
又是一道需要真正思考了才可以做出来的~~水题~~。

## 题目描述

给出一个`N * M `的`01`矩阵, 输出每个`0`到离这个点最近的`1`的距离。

## 思考历程

### 暴力

由于 $N \le 10^3 $
如果在赛场上出现这个题, 我们优先考虑暴力。 暴力也是很简单,从每个为`0`的点出发`bfs`找到与最近的`1`的距离就可以了。

### 正解
但是暴力只能拿到`36`分,由于 $N \le 10^3 $, 所以正解应该是扫一遍的 $Ο(n * m)$

这个时间只够我们遍历填一遍表,填一遍表? 我们是否只需要根据 `1` 的位置,直接填到表里就可以呢?

思考到这里,这道题的正解就出来了。

其中我们只需要填一遍表,不需要进行更新求最小,第一次填到这个点的距离就是答案了。

```cpp
void bfs() {
// 应该思考的: 把什么塞到队列里呢?
while(q.size()) {
node u = q.front(); q.pop();
for (int i = 0; i < 4; i++) {
int x = dx[i] + u.x, y = dy[i] + u.y;
if (x < 1 || x > n || y < 1 || y > m || ans[x][y] != -1) continue;
ans[x][y] = ans[u.x][u.y] + 1;
q.push({x, y});
}
}
}
```

标签:暴力,题解,矩阵,距离,BJWC2010,思考,ans,一遍,295
来源: https://www.cnblogs.com/Zheng-XiangYu/p/15871563.html