解析:我刚刚开始把这题给想复杂了,用回溯来求解,其实这题没有这么复杂,直接用两次for在加上判断是否越界,就可以解决了。
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
const int N = 200;
int m,n,w;
int grid[N][N];
bool judge(int r,int c) {
for(int i = 0; i < w; i++) {
if(grid[r][c+i]) {
return false;
}
}
return true;
}
int main() {
int t;
scanf("%d",&t);
while(t--) {
memset(grid,0,sizeof(grid));
scanf("%d%d%d",&n,&m,&w);
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
scanf("%d",&grid[i][j]);
}
}
int ans = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if( j + w <= m && judge(i,j)) {
ans++;
}
}
}
printf("%d\n",ans);
}
return 0;
}