hdu 1312

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
#include <cmath>
#include <algorithm>
#include <queue>
#include <vector>
#define inf 0x3f3f3f3f
#define sd(a) scanf("%d",&a)
#define mem0(a) memset(a,0,sizeof(a))
#define lowbit(x) ((x)&(-x))
typedef long long ll;
const int mod = 1e9+7;
const int maxn=30;
using namespace std;
int n,m,sum;
char a[25][25];
int dir[4][2]= {
    
    {
    
    0,1},{
    
    0,-1},{
    
    1,0},{
    
    -1,0}};
int sx,sy;
int book[50][50]={
    
    0};
struct node{
    
    
    int x,y;
};

void dfs(int x,int y)
{
    
    
    queue<node>q;
    node cur,next;
    cur.x = x,cur.y = y;
    //cout<<cur.x<<" "<<cur.y<<endl;
    q.push(cur);
    book[x][y]=1;
    while(!q.empty())
    {
    
    
        cur = q.front();
        q.pop();
        for(int i=0; i<4; i++)
        {
    
    
        next = cur;
        next.x=cur.x+dir[i][0];
        next.y=cur.y+dir[i][1];
        //cout<<next.x<<" "<<next.y<<endl;
        if(next.x<1||next.x>n||next.y<1||book[next.x][next.y]==1||next.y>m||a[next.x][next.y]=='#')
            continue;
            else sum++;
            book[next.x][next.y] = 1;
            q.push(next);
        }

    }
}

int main()
{
    
    
    while(cin>>m>>n)
    {
    
    
        if(m==0&&n==0)
            break;
        memset(book,0,sizeof(book));
        sum=0;
        for(int i=1; i<=n; i++)
        {
    
    
            for(int j=1; j<=m; j++)
            {
    
    
                cin>>a[i][j];
                if(a[i][j]=='@')
                {
    
    
                    sx=i;
                    sy=j;
                }
            }
        }
        dfs(sx,sy);
        cout<<sum+1<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42937838/article/details/104780325