计算2d数组中的所有数字

时间:2015-05-22 22:25:44

标签: arrays algorithm go

我正在尝试编写控制台扫雷,但无法弄清楚如何迭代2d数组,并计算每个元素周围的“-1”数量。我的数组看起来像

[0 0 0 0 0]
[0 0 -1 0 0]
[0 0 0 0 0]
[0 0 0 -1 -1]
[0 0 0 -1 -1]

哪里是“-1”,这是我的。我试图用代码

简单地迭代它
for i := 0; i < row; i++ {
numb := 0
    for j := 0; j < col; j++ {
         if ary[i-1][j-1] == -1 {
             numb ++ } 
         }
         if ary[i-1][j] == 1 {
             numb ++ }
         //rest of code omitted

    }

但这导致了巨大的代码,很难阅读和理解。是否有更灵活的方法来检查currentfor-iterator周围的所有元素,因此结果看起来像

[0 1  1   1 0]
[0 1 -1   1 0]
[0 1  2   2 1]
[0 0  1  -1 -1]
[0 0  1  -1 -1]

1 个答案:

答案 0 :(得分:2)

for i := 0; i < row; i++ {
    for j := 0; j < col; j++ {
        if ary[i][j] == -1 {
            for k := max(0, i - 1); k <= min(row - 1, i + 1); k++ {
                for l := max(0, j - 1); l <= min(col - 1, j + 1); l++ {
                    if ary[k][l] != -1 {
                        ary[k][l] ++
                    }
                }
            } 
        }
    }
}

前两个外环通过数组。如果观察到的数字是-1,那么它会增加所有周围的细胞,除非该区域有一个地雷。为了避免检查ary[k][l]是否超出边界,之前通过使用min / max技巧来计算边界,以确保kl不在边界之外。例如。除非max(0, i-1)小于i-1,否则i-1将始终返回0,然后返回0