poj1979

#include<iostream>
using namespace std;
char map[25][25];
int n,m;
int sx,sy;
int vis[25][25];
typedef struct node
{
    int x;
    int y;
}node;
node queue[10000];
int sum;
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};

void bfs(int x, int y)
{
    int head,tail;
    head=0,tail=0;
    node startnode;
    startnode.x=x;
    startnode.y=y;
    queue[tail++]=startnode;
    vis[x][y]=1;
    while(head!=tail)
    {
        node cur,next;
        cur=queue[head++];
        sum++;
        for(int i=0;i<4;i++)
        {
            next.x=cur.x+dx[i];
            next.y=cur.y+dy[i];
            if(next.x>=0&&next.y>=0&&next.x<m&&next.y<n&&vis[next.x][next.y]==0&&map[next.x][next.y]=='.')
            {
                vis[next.x][next.y]=1;
                queue[tail++]=next;
            }
        }
    }
}


int main()
{
    //freopen("input.txt","r",stdin);
    while(1)
    {
        cin>>n>>m;
        if(n==0&&m==0)
            break;
        for(int i=0;i<m;i++)
            cin>>map[i];
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                vis[i][j]=0;
                if(map[i][j]=='@')
                {
                    sx=i;
                    sy=j;
                }
            }
        }
        sum=0;
        bfs(sx,sy);
        cout<<sum<<endl;
    }
    return 0;
}

 

posted on 2017-05-08 16:17  bbcai  阅读(109)  评论(0编辑  收藏  举报