@TOC 航拍地图
问题描述
Jacky在网上发布了通过无人机航拍的某海域的地图,该海域有很多岛屿,为了能更好地分析该区域的航拍地图,地图被数字化为0到9组成矩阵,0表示该位置为大海,数字1到9代表该位置为陆地,沿非0数字上下左右还是非0数字则为同一陆地,求给定的数字化航拍地图中陆地的个数。
【输入格式】
第1行为两整数m,n(m行,n列)
第2行开始是一个m*n的矩阵
【输出格式】
只有1行,为矩阵中的陆地的个数。
【输入样例】
4 11
04523000815
90345605000
60456006711
00000000894
【输出样例】
4
算法分析
根据题目分析,要求在一个矩阵中找数据块(即题目中的陆地),而且陆地上下左右还是陆地则为同一陆地,通过设计算法求出陆地的个数。
本题可以用树的深度优先搜索,进行深度优先搜索找到第一个数字所有相关的子结点,直到搜索完为一个数字块,然后寻找下一个树的根节点进行搜索。最后得到的数字块个数就是题中所说的陆地个数。而且要注意不能重复搜索,即在遍历矩阵的时候如果该数据没有被搜索过,PRC[i][j]不为0;若被搜索过,将其置0防止重复搜索。函数功能模块设计如图1-1所示。