广搜
#include<iostream>
#include<queue>
using namespace std;
int Map[8][2]={{-1,0},{1,0},{0,-1},{0,1},{-1,-1},{-1,1},{1,-1},{1,1}};
char Gra[25][25];

 


struct node
{
    int x;
    int y;
}start,temp;

 

int main()
{
    int row,col,posr,posc;
    queue<node> qu;
    while((cin>>row>>col>>posr>>posc) && !(row==0 && col==0 && posr==0 && posc==0))
    {
        int i,j;
        //外围加墙
        for(i=0;i<=row+1;i++)
            for(j=0;j<=col+1;j++)
                Gra[i][j]='.';

        for(i=1;i<=row;i++)
            for(j=1;j<=col;j++)
                cin>>Gra[i][j];

        start.x=posr;
        start.y=posc;
        qu.push(start);
        Gra[posr][posc]='#';

        int sum=0;
        while(!qu.empty())
        {
            start=qu.front();
            qu.pop();

            int x,y;
            //判四周是否有物体,没有则边界加1
            for(i=0;i<4;i++)
            {
                x=start.x+Map[i][0];
                y=start.y+Map[i][1];
                if(Gra[x][y]=='.')
                    sum++;
            }
            
            for(i=0;i<8;i++)
            {
                x=start.x+Map[i][0];
                y=start.y+Map[i][1];

                if(Gra[x][y]!='.' && Gra[x][y]!='#')
                {
                    temp.x=x;
                    temp.y=y;
                    qu.push(temp);
                    Gra[x][y]='#';
                }
            }
        }

        cout<<sum<<endl;
    }

    return 0;
}

 

posted on 2010-05-11 10:03  VRS  阅读(284)  评论(0编辑  收藏  举报