思路
遍历地图,每次找到@dfs标记一下相邻的@就ok了
这题对角线也算相邻的
AC代码
#include<iostream>
#include<cstdio>
using namespace std;
char mm[110][110];
int N,M;
int mov[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,1},{-1,1},{1,-1},{-1,-1}};
void dfs(int x,int y){
if(x>=0&&y>=0&&x<N&&y<M&&mm[x][y] == '@'){
// cout<<x<<" "<<y<<endl;
mm[x][y] = '*';
for(int i = 0 ;i<8;i++){
dfs(x+mov[i][0],y+mov[i][1]);
}
}
return;
}
int main(){
while(scanf("%d%d",&N,&M)!=EOF&&N!=0&&M!=0){
int ans = 0;
for(int i=0;i<N;i++){
scanf("%s",mm[i]);
}
for(int i = 0 ; i<N;i++){
for(int j = 0 ;j<M;j++){
if(mm[i][j] == '@'){
// cout<<"get one!"<<endl;
ans++;
dfs(i,j);
}
}
}
printf("%d\n",ans);
}
return 0;
}
网友评论