我无法想出一个算法来通过一个由零和一个矩阵组成的矩阵,例如看起来像这样:
3 5
1 0 1 1 1
0 0 1 0 1
0 0 1 1 1
前两位是行数和列数。零是空格,实际是“线”。我知道要通过矩阵,我需要使用两个嵌套循环:
for(int i = 0; i < rows; i++)
for(int j = 0; j < cols; j++)
/* code */
我需要能够将矩形的左上角坐标和右下角坐标保存在矩阵中。
我将矩阵保存在一维字段中,以及行数和列数。如果打印到屏幕上,这个特殊的矩阵看起来像这样:
1 0 1 1 1 0 0 1 0 1 0 0 1 1 1
我似乎找不到合适的算法来识别任何这种矩阵中的正方形。谁能给我一个提示?
答案 0 :(得分:2)
简单算法:
for(int i = 0; i < rows-2; i++) // scan all but last 2 rows since we scan down once we find the top of a square
// Reset the count after each row
int count = 0;
int lastCell = -1;
for(int j = 0; j < cols; j++) { // Scan all columns
// look for 3 cells in a row the same
if (cells[i][j] == lastCell) {
count++;
} else {
lastCell = cells[i][j];
count=1;
}
if (count >= 3) {
// Potential match found since we have a row of three the same
// now check for the sides and bottom
if (cells[i-2][j+1] == lastCell && cells[i-2][j+2] == lastCell && // left side
cells[i][j+1] == lastCell && cells[i][j+2] == lastCell && // right side
cells[i-1][j+2] == lastCell // bottom
) {
// Square detected - do whatever you like here :)
// i, j is the top right corner of the detected square
}
}
}
如果你需要方形是空心的,那么检查中心方块!= lastCell。
如果您只需要某个值的正方形,则只检查该值。