L2-048 寻宝图-PAT团体程序设计天梯赛GPLT

给定一幅地图,其中有水域,有陆地。被水域完全环绕的陆地是岛屿。有些岛屿上埋藏有宝藏,这些有宝藏的点也被标记出来了。本题就请你统计一下,给定的地图上一共有多少岛屿,其中有多少是有宝藏的岛屿。

输入格式:

输入第一行给出 2 个正整数 N 和 M(1<N×M≤10^5),是地图的尺寸,表示地图由 N 行 M 列格子构成。随后 N 行,每行给出 M 位个位数,其中 0 表示水域,1 表示陆地,29 表示宝藏。
注意:两个格子共享一条边时,才是“相邻”的。宝藏都埋在陆地上。默认地图外围全是水域。

输出格式:

在一行中输出 2 个整数,分别是岛屿的总数量和有宝藏的岛屿的数量。

输入样例:

10 11
01000000151
11000000111
00110000811
00110100010
00000000000
00000111000
00114111000
00110010000
00019000010
00120000001

输出样例:

7 2

分析:这是一道BFS应用题。island中存储一共有多少座岛屿,precious中存储有宝藏的岛屿数量。用p标记每座岛屿是否有宝藏,XN与NY数组为上下左右走动的控制数组。将地图信息存储在string字符数组A中,Q存储的是坐标信息。
遍历每一个点,如果该点不为0的话,就进入它。不断向上下左右可以连接的岛屿进军,如果某个岛屿有宝藏,则将p标记成1,进军过的岛屿可以把它修改成’0’,后续就不会重复访问。

❤ 点击这里 -> 订阅《PAT | 蓝桥 | LeetCode学习路径 & 刷题经验》by 柳婼

❤ 点击这里 -> 订阅《从放弃C语言到使用C++刷算法的简明教程》by 柳婼

❤ 点击这里 -> 订阅PAT甲级乙级、蓝桥杯、GPLT天梯赛、LeetCode题解离线版