题目链接
Red and Black
代码如下
#include<bits/stdc++.h>
using namespace std;
const int M = 22;
char Map[M][M];
bool vis[M][M];
int w,h,ans;
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
void dfs(int si, int sj)
{
if(si<1||si>w||sj<1||sj>h)
return;
ans++;
vis[si][sj]=1;
for(int i=0;i<4;i++)
{
int di,dj;
di = si+dir[i][0];
dj = sj+dir[i][1];
if(!vis[di][dj]&&Map[di][dj]=='.') dfs(di,dj);
}
}
int main()
{
while(cin>>h>>w)
{
if(h==0&&w==0) break;
int si,sj;
for(int i=1;i<=w;i++)
for(int j=1;j<=h;j++)
{
cin>>Map[i][j];
vis[i][j] = 0;
if(Map[i][j]=='@')
{
si = i;sj = j;
}
}
ans = 0;dfs(si,sj);
cout<<ans<<endl;
}
return 0;
}