题面
题解
Flood Fill 模型,用dfs来求连通块,因为是内部搜索,不需要还远状态
代码
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=25;
int n,m;
char g[N][N];
bool st[N][N];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int dfs(int x,int y){
int cnt=1;
st[x][y]=true;
for(int i=0;i<4;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx<0||nx>n-1||ny<0||ny>m-1) continue;
if(g[nx][ny]=='#') continue;
if(st[nx][ny]) continue;
cnt+=dfs(nx,ny);
}
return cnt;
}
int main(){
while(cin>>m>>n,n||m){
memset(st,false,sizeof st);
for(int i=0;i<n;i++){
cin>>g[i];
}
int sx,sy;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(g[i][j]=='@'){
sx=i,sy=j;
break;
}
}
}
cout<<dfs(sx,sy)<<endl;
}
return 0;
}