这一题是简单的DFS就行了,当做练习DFS的题目,进行八个方向的搜索。好像也没什么可以剪枝的了。
#include<stdio.h>
int dir[8][2]={{1,0},{-1,0},{0,1},{0,-1},{1,1},{-1,1},{1,-1},{-1,-1}};
char str[101][101];
int m,n;
void dfs(int a,int b){
int sa,sb;
for(int i = 0;i<8;i++){
sa = a + dir[i][0];
sb = b + dir[i][1];
if(str[sa][sb] == '@' && sa>=0 && sa<=m && sb>=0 &&sb<=n){
str[sa][sb] = '*';
dfs(sa,sb);
}
}
}
int main(){
while(scanf("%d %d",&m,&n),m){
int count = 0;
for(int i = 0;i<m;i++){
scanf("%s",str[i]);
}
for(int i = 0;i<m;i++){
for(int j = 0;j<n;j++){
if(str[i][j] == '@'){
str[i][j] = '*';
count++;
dfs(i,j);
}
}
}
printf("%d\n",count);
}
return 0;
}