赞
踩
给定一个二维数组,数组元素由0和1组成。0代表水,1代表陆地。陆地可以形成岛。
如果上下左右,包括对角线方向如有相邻的陆地(1)则可以形成岛。如下图所示。
编写一个算法,求岛的数量。
例如:规定一个二维数组:
- {1, 1, 0, 0, 0},
- {0, 1, 0, 0, 1},
- {1, 0, 0, 1, 1},
- {0, 0, 0, 0, 0},
- {1, 0, 1, 0, 1}
根据这个二维数组,岛的划分如下图所示,可以划分为5个岛屿。
注意:这个问题需要检索8个方向。
与之前不同的是,之前陆地(1)的相邻不包含对角线的4个方向,只能水平方向或者垂直方向。
这是标准问题的一个变化:“计算无向图中连接组件的数量”。最常见的算法设计思想是采用DFS算法,给出一个解。
其实,也可以使用不相交集数据结构来解决这个问题。其思想是将所有“1”的单元格都视为单个集。遍历矩阵并对所有相邻的1个顶点进行并集。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。