在一个二维数组中查找相邻元素并计数。

3

我对作业的这部分很困惑,希望能得到一些帮助。我需要循环遍历给定的二维数组,并找出所有相似的元素,这些元素相邻并计数,例如:

AA--B
AA--B
-AA--
----C

所以总数将是3,一个为A,一个为B,一个为C,我只需要一个开始的想法。目前为止,我有:
public static int howManyOrganisms(char[][] image){
    int count = 0;
    for (int i = 0; i < image.length; i++) {
        for (int j = 0; j < image[i].length; j++) {
            if(image[i][j] != '-') {
                count++;

            }
            System.out.println();
        }
        return howManyOrganisms(image, count);
    }
}

我需要帮助找出如何跟踪与另一个类似元素相接触(即左、右、下、上方向)的所有元素的总数。


2
你正在正确的轨道上:1)目标:计算# /相邻元素。2)定义一个函数。例如:howManyOrganisms()。3)创建一些循环以检查每行中的每列。4)对于每个元素,检查上下左右。如果相邻于一个或多个,则添加到计数器中。5)优化(您是否需要检查第一行的“向上”或最后一列的“向右”等)。 - paulsm4
1
看起来像是一个经典的“泛洪填充”算法修改。请查看这个链接 - Victor Gubin
1个回答

1
在每次迭代中,您可以使用i、j变量来“导航”2D平面,并查看任何交互项是否相同。在每次迭代中,您将检查以下索引以查看它们是否相同:
  • image[i-1][j](向上一行)
  • image[i+1][j](向下一行)
  • image[i][j-1](向左一个位置)
  • image[i][j+1](向右一个位置)
当然,在所有这些语句之前,您应该首先检查+1/-1是否仍在矩阵的大小范围内,否则您将遇到越界异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接