题目描述:
本题目思路比较清晰,就是要找出点,然后在从里面计数,因为对于初学者而言,如果按照xy方向同时展开可能出现混乱,所以我用了俩函数,分别代表xy方向的搜索,特别注意,如果k==1,这种情况的话横竖都是一样的,因此是需要特判的,所以我们单独提出来,k==1时,有多少空位就有多少答案0.0
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n, m,res,k;
char g[105][105];
bool xvis[105][105];
bool yvis[105][105];
int xres, yres;
bool xdfs(int x, int y)
{
if (y + k - 1 > m) return false;
for (int i = y; i < y + k; i++) {
if (g[x][i] == '#') return false;
}
return true;
}
bool ydfs(int x, int y)
{
if (x + k - 1 > m) return false;
for (int i = x; i < x + k; i++) {
if (g[i][y] == '#') return false;
}
return true;
}
int main()
{
res = 1;
int ans = 0;
cin >> n >> m >> k;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> g[i][j];//输入
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (g[i][j] == '.')
{
if (k == 1)
{
ans++;
continue;
}
else if(k!=1){
if (xdfs(i, j)) ans++;
if (ydfs(i, j)) ans++;
}
}
}
}
cout << ans;
return 0;
}