一个N*M的矩阵只有0、1两种元素,1为陆地0为海洋。相邻(上下左右四个方向)即为同一块陆地,输出矩阵中岛屿数量。
算法的“广度优先”还是“深度优先”:
1.广度:一行一行遍历记录岛屿状态以及岛屿产生与合并情况。
2.深度:从一个节点开始四个方向去寻找连接岛屿,并标记寻找过的位置。
这里采用的是深度优先递归实现,非递归实现需要借助栈。
代码:
/**
* 二维矩阵岛屿问题:0 - 海,1 - 陆地,相邻上下左右
*/
class Demo3 implements AbstractDemo {
private int[][] data;
@Override
public void getData() {
int length = 10, width = 10;
System.out.println("岛屿结构:");
data = new int[length][width];
for (int i = 0; i < length; i++) {
System.out.print("[");
for (int j = 0; j < width; j++) {
data[i][j] = Math.random() > 0.5 ? 1 : 0;
System.out.print(data[i][j] + " ");