小图最近非常喜欢玩一个游戏。游戏的规则是,在一个n*m大小的0/1矩阵中,找到如下的图形:
?1?
111
111
?1?
其中?位置可以是0也可以是1。
游戏中,小图需要指出在给出的0/1矩阵中这个图形出现在了多少个不同的位置。
现在他希望你可以写一个程序帮助他计算这个值。
输入的第一行是两个正整数n, m,1 <= n, m <= 1000。
接下来的n行,每行有m个字符,每个字符是0或1中的一个,表示了整个0/1矩阵。
输出只包含一个正整数,为输入的0/1矩阵中有多少个不同位置的上述图形。
5 5 01000 11100 11101 11111 00101
3
样例中总共有三个不同的图形,它们的中心分别在:
第2行第2列、第3行第2列、第4行第3列。
#include <bits/stdc++.h> using namespace std; int main() { int n, m; cin >> n >> m; char maps[n][m]; int cnt = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> maps[i][j]; } } for (int i = 1; i < n - 1; ++i) { for (int j = 1; j < m - 1; ++j) { if (maps[i][j] == '1') { if (maps[i - 1][j] == '1' && maps[i + 1][j] == '1' && maps[i][j - 1] == '1' && maps[i][j + 1] == '1') { ++cnt; } } } } cout << cnt << endl; }