题目描述:
自己目测对的代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define M 2000
#define NotANu 10
int Map[M][M];
int Queue[M];
int n,m,k,t;
int Count;
int dfs(int x,int y){
if(Map[x][y]==k){
Map[x][y]=NotANu;
if(x>0) dfs(x-1,y); //向上搜
if(x<n-1) dfs(x+1,y); //向下搜
if(y>0) dfs(x,y-1); //向左搜
if(y<m-1) dfs(x,y+1); //向右搜
}
return 1;
}
int main(){
int i,j,l;
while(scanf("%d %d",&n,&m)!=EOF){
memset(Map,0,sizeof(Map));
memset(Queue,0,sizeof(Queue));
Count=0;t=0;
for(i=0;i<n;i++)
for(j=0;j<m;j++){
scanf("%d",&Map[i][j]);
Queue[t++]=Map[i][j];
}
sort(Queue,Queue+t);
for(l=0;l<t;l++){
if(l>0 && Queue[l]==Queue[l-1]) continue;
k=Queue[l];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
if(Map[i][j]==k){dfs(i,j);Count++;}
}
printf("%d\n",Count);
}
return 0;
}