Wednesday, January 9, 2013

LightOj - 1012 (Guilty Prince)

#include<queue>
#include<iostream>
using namespace std;

const int MAX=25;

char board[MAX][MAX];
int vis[MAX][MAX];



int main()
{


    int tc,cn,R,C,p,q,cnt=0,i,j;

    scanf("%d",&tc);

    for(cn=1;cn<=tc;cn++)
    {
        scanf("%d%d",&C,&R);

        for(i=0;i<R;i++)
            scanf("%s",board[i]);

        queue<int>Q;

        for(i=0;i<R;i++)
            for(j=0;j<C;j++)
                vis[i][j]=0;

        for(i=0;i<R;i++)
            for(j=0;j<C;j++)
            {
                if(board[i][j]=='@')
                {
                    vis[i][j]=1;
                    Q.push(i);
                    Q.push(j);
                }
            }

        while(!Q.empty())
        {
            i=Q.front();
            Q.pop();

            j=Q.front();
            Q.pop();

            p=i-1;
            q=j;

            if(p>=0 && p<R && q>=0 && q<C && board[p][q]=='.')
            {

                if(vis[p][q]==0)
                {
                    vis[p][q]=1;

                    Q.push(p);
                    Q.push(q);
                }
            }

            p=i+1;
            q=j;

            if(p>=0 && p<R && q>=0 && q<C && board[p][q]=='.')
            {

                if(vis[p][q]==0)
                {
                    vis[p][q]=1;

                    Q.push(p);
                    Q.push(q);
                }
            }

            p=i;
            q=j+1;

            if(p>=0 && p<R && q>=0 && q<C && board[p][q]=='.')
            {

                if(vis[p][q]==0)
                {
                    vis[p][q]=1;

                    Q.push(p);
                    Q.push(q);
                }
            }

            p=i;
            q=j-1;

            if(p>=0 && p<R && q>=0 && q<C && board[p][q]=='.')
            {

                if(vis[p][q]==0)
                {
                    vis[p][q]=1;

                    Q.push(p);
                    Q.push(q);
                }
            }
        }
        cnt=0;
        for(i=0;i<R;i++)
            for(j=0;j<C;j++)
            {
                if(vis[i][j]==1)
                cnt++;
            }

            printf("Case %d: %d\n",cn,cnt);

    }
}

No comments:

Post a Comment