我的C ++老师为我们遇到的问题提供了解决方案,而且有一部分我无法理解正在发生的事情。有人可以向我解释一下吗?正在从文本文件中读入m和n以定义数组的大小。
for (int row=0; row < m; row++) {
for (int col = 0; col < n; col++) {
if (field[row][col] =='*') {
ctr[row - 1][col - 1]++;
ctr[row - 1][col]++;
ctr[row - 1][col + 1]++;
ctr[row][col - 1]++;
ctr[row][col + 1]++;
ctr[row + 1][col - 1]++;
ctr[row + 1][col]++;
ctr[row + 1][col + 1]++;
}
}
}
答案 0 :(得分:4)
它会增加矩阵中恒星(*
)周围所有方格的值。
首先搜索*
,然后增加星球周围所有8个方格的值。
假设矩阵field
的一部分如下所示。
| |
+----+----+---+
| * |
+----+----+---+
| |
和ctr
如下所示
1 | 1 | 1
+----+----+---+
1 | 1 | 1
+----+----+---+
1 | 1 | 1
ctr
将
2 | 2 | 2
+----+----+---+
2 | 1 | 2
+----+----+---+
2 | 2 | 2
逻辑如上。但是当星星靠近边界时要小心访问违规。
答案 1 :(得分:1)
您有两个2D数组ctr
和field
。 field
的某些字段包含*
假设这个2D数组
field ---->row
. | . | .
+----+----+---+
| . | * | .
| +----+----+---+
c . | . | .
o
l
将给出
ctr ---->row
1 | 1 | 1
| +----+----+---+
| 1 | * | 1
c +----+----+---+
o 1 | 1 | 1
l
代码:
for (int row=0; row < m; row++) {
for (int col = 0; col < n; col++) {
if (field[row][col] =='*') { //Assume center of the field array contains *
ctr[row - 1][col - 1]++; //incr elemnt at previous row, previous col
ctr[row - 1][col]++; //incr elemnt on previous row, same col
ctr[row - 1][col + 1]++; //incr elemnt on previous row, next col
ctr[row][col - 1]++; //incr elemnt on same row, previous col
ctr[row][col + 1]++; //incr elemnt on same row, next col
ctr[row + 1][col - 1]++; //incr elemnt on next row, previous col
ctr[row + 1][col]++; //incr elemnt on next row, same col
ctr[row + 1][col + 1]++; //incr elemnt on next row, next col
}
}
}
答案 2 :(得分:0)
它在“Field”矩阵中查找*。
然后它取*的位置,并在“ctr”矩阵的*位置附近加上1。