北邮oj-图像识别

在这里插入图片描述
在这里插入图片描述
本题应采用递归深度搜索

#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;
} 

猜你喜欢

转载自blog.csdn.net/weixin_37762592/article/details/88714657