C解决方案,有人可以向我解释这段代码吗?

时间:2013-04-09 11:44:00

标签: c++ multidimensional-array

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

        }
    }
}

3 个答案:

答案 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数组ctrfieldfield的某些字段包含*

假设这个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。