题目不是太难,与red and black那题类似,不过把坐标变换数组扩大到8个元素,详情参考:点击打开链接。不过还是有许多的小细节要注意的!废话不多说,看代码!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int m,n,ans,a,b,sum;
char map[110][110];
int px[8]={-1,0,1,0,-1,-1,1,1};
int py[8]={0,1,0,-1,-1,1,-1,1};//对应八个方位
void dfs(int a,int b){
for(int i=0;i<8;i++){
int x=a+px[i];
int y=b+py[i];
if(map[x][y]=='@'){
map[x][y]='*';//把遍历过的淘汰掉!!
dfs(x,y);
}
}
}
int main(){
while(scanf("%d%d",&m,&n),m||n){
memset(map,'*',sizeof(map));
ans=0;
for(int i=1;i<=m;i++){
scanf("%s",&map[i]);
}
for(int i=1;i<=m;i++){
for(int j=0;j<=n;j++){
if(map[i][j]=='@'){
ans++;//符合条件就加1
dfs(i,j);
}
}
}
printf("%d\n",ans);
}
return 0;
}