本题应采用递归深度搜索
#include<bits/stdc++.h>
using namespace std;
#define maxn 105
int buf[maxn][maxn];
bool mark[maxn][maxn];
int D,N,M;
void dfs(int x,int y,int value){
if(x>=0&&x<N&&y>=0&&y<M){
if(mark[x][y] == false&&abs(buf[x][y]-value)<=D){
mark[x][y] = true;
dfs(x-1,y-1,buf[x][y]);//参数必须是buf[x][y],不能是value
dfs(x-1,y,buf[x][y]);
dfs(x-1,y+1,buf[x][y]);
dfs(x,y-1,buf[x][y]);
dfs(x,y+1,buf[x][y]);
dfs(x+1,y-1,buf[x][y]);
dfs(x+1,y,buf[x][y]);
dfs(x+1,y+1,buf[x][y]);
}
}
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d %d %d",&N,&M,&D);
memset(mark,0,sizeof(mark));
memset(buf,0,sizeof(buf));
int cnt = 0;
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
scanf("%d",&buf[i][j]);
}
}
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
if(mark[i][j]==false){
dfs(i,j,buf[i][j])
cnt++;
}
}
}
printf("%d\n",cnt);
}
return 0;
}