我正在尝试编写控制台扫雷,但无法弄清楚如何迭代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
}
但这导致了巨大的代码,很难阅读和理解。是否有更灵活的方法来检查current
中for-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]
答案 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技巧来计算边界,以确保k
和l
不在边界之外。例如。除非max(0, i-1)
小于i-1
,否则i-1
将始终返回0
,然后返回0
。