应该是最为基础的一个dfs题,但还是看了书才打出来,发现刘汝佳书上代码风格还是很简洁的,值得学习.
代码如下:
#include<bits/stdc++.h>
#define maxn 105
#define rep(i,a,n) for(i=a;i<=n;i++)
#define per(i,a,n) for(i=a;i>=n;i--)
using namespace std;
int ans,col,row;
char mapp[maxn][maxn];int vis[maxn][maxn];
void dfs(int r,int c);
int main(){
while(1){
scanf("%d%d",&row,&col);
if(row==0)break;
int i,j;ans=0;char tmp;
rep(i,1,row)
rep(j,1,col)
{
cin>>tmp;mapp[i][j]=tmp;vis[i][j]=0;
}
rep(i,1,row)
rep(j,1,col){
if(mapp[i][j]=='@'&&vis[i][j]==0) {
dfs(i,j);ans++;
}
}
printf("%d\n",ans);
}
}
void dfs(int r,int c){
vis[r][c]=1;
if(mapp[r][c]=='*')return ;
int i,j;
rep(i,-1,1)
rep(j,-1,1){
if((i!=0||j!=0)&&r+i<=row&&r+i>=1&&c+j>=1&&c+j<=col&&vis[r+i][c+j]==0) dfs(r+i,c+j);
}
}