0

我的 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]++;

        }
    }
}
4

3 回答 3

4

它将增加一个*矩阵中围绕星星 ( ) 的所有正方形的值。

首先它搜索 a *,然后增加该星周围所有 8 个方格的值。

假设矩阵的一部分field如下所示。

     |    |  
+----+----+---+
     |  * |  
+----+----+---+
     |    |  

ctr就像下面

   1 |  1 | 1
+----+----+---+
   1 |  1 | 1
+----+----+---+
   1 |  1 | 1

ctr将会

   2 |  2 | 2
+----+----+---+
   2 |  1 | 2
+----+----+---+
   2 |  2 | 2

逻辑如上。但是当星星靠近边界时要小心访问冲突。

于 2013-04-09T11:47:48.670 回答
1

您有两个二维数组ctrfield. field包含的一些字段*

假设这个二维数组

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

        }
    }
}
于 2013-04-09T11:55:28.867 回答
0

它在“字段”矩阵中查找 *。

然后它获取 * 的位置,并将“ctr”矩阵中 * 位置周围的值加 1。

于 2013-04-09T11:54:03.907 回答