很入門的深搜:
#include<iostream>
#include<cstring>
using namespace std;
void dfs(int,int);
int a[8][2]={
{-1,-1},
{-1,0},
{-1,1},
{0,-1},
{0,1},
{1,-1},
{1,0},
{1,1}
};
int n,m;
char map[101][101]={0};
int main()
{
freopen("0.txt","r",stdin);
while(cin>>n>>m &&m!=0){
memset(map,0,sizeof(map));
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
cin>>map[i][j];
}
}
int cut = 0;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(map[i][j] == '@'){
dfs(i,j);cut++;
}
}
}
cout<<cut<<endl;
}
return 0;
}
void dfs(int i,int j){
if(i<0 || j<0 || i>=n || j>=m)return ;
for(int x=0;x<8;++x){
if(i+a[x][0]>=0 && j+a[x][1]>=0
&& j+a[x][1]<m && i+a[x][0]<n
&& map[i+a[x][0]][j+a[x][1]] =='@')
{
map[i+a[x][0]][j+a[x][1]]='*';dfs(i+a[x][0],j+a[x][1]);
}
}
}