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

问题描述:

我的C++老师为我们遇到的问题提供了解决方案,并且有一部分我无法理解发生了什么。有人可以向我解释吗?正在从文本文件读入m和n以定义数组的大小。C解决方案,有人可以向我解释这段代码吗?

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

请介绍一下你写了这个问题码。 – Deepu 2013-04-09 11:45:50

+0

如果你写下你必须解决的问题,这可能会有所帮助。 – Rafa 2013-04-09 11:46:06

+0

什么是ctr?这有些神奇吗? – 4pie0 2013-04-09 11:46:12

它会增加矩阵中星号(*)周围所有方块的值。

首先搜索*,然后增加恒星周围所有8个方块的值。

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

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

ctr是像下面

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

ctr

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

的逻辑是如上述。但是当星星靠近边界时要小心访问违规。

+0

它应该至少 – 4pie0 2013-04-09 11:53:06

+2

毫米[得到一个ASCII垫来绘制大图像](http://www.asciiflow.com/#Draw):) – 2013-04-09 11:56:20

+0

@GrijeshChauhan:谢谢,我用我的记事本++杀了自己! :-))) – deepmax 2013-04-09 12:00:45

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

然后它采用*的位置,并将“ctr”矩阵中*位置周围的值加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 

     } 
    } 
} 
+1

http://www.asciiflow.com/#Draw – 2013-04-09 11:57:35

+0

@Grijesh谢谢:)我总是想知道如何发布如此漂亮的图表:P现在我知道 – 2013-04-09 12:02:55

+0

其实我只是今天才知道这个...否则我自己手工绘制:) – 2013-04-09 12:12:45