NJUST 挺好的bfs题

water3

Time Limit: 1000ms

Memory Limit: 65536KB

Description

听说全球气候变暖,冰川融化,海水淹大地。着实好奇要融化多少冰川会淹没我的宿舍,哦不,淹没南京,反正NJUST应该总会是第一批被淹的。现将整个NJUST简化成一个N×M的棋盘。每个小格子代表一个区域,并且拥有一个值表示海拔。一个6×5的棋盘像下面这样:4 4 4 3 34 2 9 1 34 1 9 1 3 2 6 3 8 2 2 1 7 1 2 2 1 2 2 2大雨倾盆,水淹的到处都是。棋盘边缘不会有无限高的墙,而是什么都没有!也就是说,如果水没过了这个棋盘的四周边缘,水就会流出去。现在我们想知道这个棋盘最多能装多少水!每个地区每个单位海拔能装一单位的水。上图中,棋盘最后能装水的情况如下:4 4 4 3 34 4 9 3 34 4 9 3 3 2 6 6 8 2 2 1 7 2 2 2 1 2 2 2总计:13单位的水无论哪儿再多水,都会从边缘流走。

Input

多CASE,测试数据以EOF结尾,对于每个CASE:第一行两个整数N,M(1 <= N, M <= 300)。接下去N行,每行M个整数H(1 <= H <= 10^5)分别对应第i行j列的海拔。

Output

一个整数,表示最多能装多少水。

Sample Input

6 5
4 4 4 3 3
4 2 9 1 3
4 1 9 1 3 
2 6 3 8 2 
2 1 7 1 2 
2 1 2 2 2
5 4
5 8 7 7
5 2 1 5
7 1 7 1
8 9 6 9
9 8 9 9

Sample Output

13
12

网址https://icpc.njust.edu.cn/Contest/751/I/

题目大意:

问这个矩阵内部可以储存多少的水。


思路:

我们用vis表示已经访问过的点。然后将所有的点都bfs一遍,其中遍历的时候有一下条件

①不能超出矩阵的范围,那就continue

②如果搜索到了边缘,且边缘的值小于我们最初开始bfs的值,那就return

③因为搜索的时候会遇到在中心的一个坑,比如说测试数据中的第二组数据。其中的那个3的周围被4个比他大的值包围了,那么我们就要搜出周围比他大的最小值。

然后有了这些条件以后,我们每次修改高度的时候都把它修改成当前所要到的这个高度就可以了,这样就不需要多一个数组来考虑了。







你可能感兴趣的:(NJUST 挺好的bfs题)