//通过dfs/bfs访问可以到达的所有结点
//并统计总结点个数
#include<iostream>
#include<cstring>
using namespace std;
int x[]={-1,1,0,0};
int y[]={0,0,-1,1};
int n,m,visited[21][21],cnt;
char map[25][25];
void dfs(int x1,int y1)
{
for(int k=0;k<4;k++)
{
int x2=x1+x[k];
int y2=y1+y[k];
if(x2>=0&&x2<n&&y2>=0&&y2<m&&map[x2][y2]=='.'&&!visited[x2][y2])
{
cnt++;
visited[x2][y2]=1;
dfs(x2,y2);
}
}
}
int main()
{
int x1,y1,i,j;
while(cin>>m>>n&&n&&m)
{
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cin>>map[i][j];
if(map[i][j]=='@')
{x1=i;y1=j;}
}
cnt=1;memset(visited,0,sizeof(visited));
dfs(x1,y1);
cout<<cnt<<endl;
}
return 0;
}
zoj--2165
最新推荐文章于 2022-06-06 18:51:49 发布