分析:DFS基礎題,典型題,新手必做之題。
不多做贅述,直接上代碼
代碼如下:
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn=1000;
int m,n,idx[maxn][maxn];
char pic[maxn][maxn];
void dfs(int r,int c,int id)
{
if (r<0||r>=m||c<0||c>=n) return;
if (idx[r][c]>0||pic[r][c]!='@') return;
int dr,dc;
idx[r][c]=id;
for (dr=-1;dr<=1;dr++)
for (dc=-1;dc<=1;dc++)
if (dc!=0||dr!=0) dfs(r+dr,c+dc,id);
}
int main()
{
int i,j;
while (scanf("%d%d",&m,&n)==2&&m&&n)
{
int count=0;
for (i=0;i<m;i++) scanf("%s",pic[i]);
memset(idx,0,sizeof(idx));
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if (idx[i][j]==0&&pic[i][j]=='@') dfs(i,j,++count);
printf("%d\n",count);
}
return 0;
}