题目
解释
- 深度优先遍历搜索
- 记录从@点开始能走到的黑点数,不要求一笔画图
- 因此我们按照左上右下的顺序,进行深度搜索,并回溯走过的点的数量
- 详细的走法可以参考图解
图解
分三条路来前行
代码段
#include<iostream>
#include<string>
#include<cstring>
#include<queue>
const int N = 30;
int H, W, x0, y0;
char g[N][N];
bool st[N][N];
int dx[4] = { -1,0,1,0 }, dy[4] = { 0,1,0,-1 };
using namespace std;
int dfs(int x, int y)
{
int cnt = 1;
st[x][y] = true;
for (int i = 0; i < 4; i++)
{
int a = x + dx[i], b = y + dy[i];
if (a<1 || a>W || b<1 || b>H)continue;
if (g[a][b] != '.')continue;
if (st[a][b])continue;
cnt += dfs(a, b);
}
return cnt;
}
int main()
{
while (cin >> H >> W && H && W)
{
for (int i = 1; i <= W; i++)
for (int j = 1; j <= H; j++)
{
cin >> g[i][j];
if (g[i][j] == '@')
x0 = i, y0 = j;
}
memset(st, 0, sizeof st);
cout << dfs(x0,y0) << endl;
}
}