#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N = 25;
int n, m;
char a[N][N];
int vis[N][N];
int ans = 0;
int dx[] = {-1, 1, 0, 0}, dy[] = {0, 0, -1, 1};
int sx, sy;
struct Point{
    int x, y;
}
void bfs()
{
    queue<Point> mq;
    mq.push({sx, sy});
    while(mq.size())
    {
        /////......pop()
    
        for(int i = 0; i < 4; i++)
        {
            int cx = x + dx[i], cy = y + dy[i];
            if(cx < 1 || cx > n || cy < 1 || cy > m) continue;
            if(vis[cx][cy]) continue;
            if(a[cx][cy] == '#')continue;
            ans++;
            vis[cx][cy] = 1;
            push();
        }
}
void dfs(int x, int y)
{
    for(int i = 0; i < 4; i++)
    {
        int cx = x + dx[i], cy = y + dy[i];
        if(cx < 1 || cx > n || cy < 1 || cy > m) continue;
        if(vis[cx][cy]) continue;
        if(a[cx][cy] == '#')continue;
        ans++;
        vis[cx][cy] = 1;
        dfs(cx,cy);
        vis[cx][cy] = 0;
    }
}
int main(void)
{
    while(1)
    {
        cin >> m >> n;
        if(n == 0 && m == 0) break;
        for(int i = 1; i <= n; i++) cin >> (a[i] + 1);
        for(int i = 1; i <= n; i++) 
            for(int j = 1; j <= m;j++) 
                if(a[i][j] == '@') sx= i,sy = j;
        ans = 1;
        memset(vis, 0, sizeof vis);
        vis[sx][sy] = 1;
        dfs(sx, sy);
        cout << ans << endl;
    }
    return 0;
}

0 条评论

目前还没有评论...