题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4414
题意:在N*N的图中,找出孤立存在的十字架的个数。十字架要求为正十字,孤立表示组成十字架的‘#的周围的一格再无’#‘。
这题告诉我们,暴力也是讲究技术的。。。。
枚举十字架中心往四个方向看就行了。
#include <bits/stdc++.h>
using namespace std;
int n;
char grid[55][55];
int main() {
while(~scanf("%d", &n), n) {
getchar();
for(int i = 1; i <= n; i++) scanf("%s", grid[i] + 1);
int ans = 0;
for(int i = 2; i < n; i++) {
for(int j = 2; j < n; j++) {
if(grid[i][j] == 'o') continue;
int u = 1, d = 1, l = 1, r = 1;
while(i + u <= n && grid[i + u][j] == '#' && grid[i + u][j - 1] == 'o' && grid[i + u][j + 1] == 'o') {
u++;
}
while(i - d >= 1 && grid[i - d][j] == '#' && grid[i - d][j - 1] == 'o' && grid[i - d][j + 1] == 'o') {
d++;
}
while(j + r <= n && grid[i][j + r] == '#' && grid[i + 1][j + r] == 'o' && grid[i - 1][j + r] == 'o') {
r++;
}
while(j - l >= 1 && grid[i][j - l] == '#' && grid[i + 1][j - l] == 'o' && grid[i - 1][j - l] == 'o') {
l++;
}
if(u != 1 && u == d && u == r && u == l) ans++;
}
}
printf("%d\n", ans);
}
return 0;
}