chen_zhe
2024-11-12 20:33:07
本题考察了二维数组以及模拟、枚举算法。
要判断网格图中是否存在一个满足条件的子矩形,可以枚举矩形的左上角坐标 check
,且 flag
为 true
时表示存在,那么代码如下:
for (int i = 1; i <= n - 3; i++) {
for (int j = 1; j <= m - 3; j++) {
if (check(i, j))
flag = true;
}
}
题目中要求的子矩形具有形状特征,可以使用常量数组记录这个子矩形,以便判断提取的子矩形是否与之相同。
const char g[4][4] = {
'0', '0', '0', '0',
'0', '1', '1', '0',
'0', '1', '1', '0',
'0', '0', '0', '0'
};
判断函数可以如下文编写,其中
例如,当 g
数组的第 g
数组下标从
bool check(int x, int y) {
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
if (c[i + x][j + y] != g[i][j])
return false;
}
}
return true;
}