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]++;
}
}
}
它会增加矩阵中星号(*
)周围所有方块的值。
首先搜索*
,然后增加恒星周围所有8个方块的值。
假设矩阵field
的一部分如下所示。
| |
+----+----+---+
| * |
+----+----+---+
| |
和ctr
是像下面
1 | 1 | 1
+----+----+---+
1 | 1 | 1
+----+----+---+
1 | 1 | 1
ctr
将
2 | 2 | 2
+----+----+---+
2 | 1 | 2
+----+----+---+
2 | 2 | 2
的逻辑是如上述。但是当星星靠近边界时要小心访问违规。
它在“字段”矩阵中查找*。
然后它采用*的位置,并将“ctr”矩阵中*位置周围的值加1。
您有两个二维阵列ctr
和field
。的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
}
}
}
http://www.asciiflow.com/#Draw – 2013-04-09 11:57:35
@Grijesh谢谢:)我总是想知道如何发布如此漂亮的图表:P现在我知道 – 2013-04-09 12:02:55
其实我只是今天才知道这个...否则我自己手工绘制:) – 2013-04-09 12:12:45
请介绍一下你写了这个问题码。 – Deepu 2013-04-09 11:45:50
如果你写下你必须解决的问题,这可能会有所帮助。 – Rafa 2013-04-09 11:46:06
什么是ctr?这有些神奇吗? – 4pie0 2013-04-09 11:46:12