11561 - Getting Gold

#include<bits/stdc++.h>
#define sz 53
using namespace std;

int X[4]= {1,0,-1,0};
int Y[4]= {0,1,0,-1};

queue<int>Q;

char str[sz][sz];
int color[sz][sz];
int W,H,counter;

void BFS(int i,int j)
{
    str[i][j]='#';
    color[i][j]=1;
    Q.push(i);
    Q.push(j);
    while(!Q.empty())
    {
        int ua=Q.front();
        Q.pop();
        int ub=Q.front();
        Q.pop();
        for(int k=0; k<4; k++)
        {
            int va=X[k]+ua;
            int vb=Y[k]+ub;
            if(str[va][vb]=='T')
            {
                str[va][vb]='#';
            }
            else if(str[va][vb]=='G' && color[va][vb]==0)
            {
                counter++;
                Q.push(va);
                Q.push(vb);
                color[va][vb]=1;
                str[va][vb]='#';
            }
            else if(str[va][vb]=='G' && color[va][vb]==1)
            {
                counter++;
                str[va][vb]='#';
            }
            else if(str[va][vb]=='.' && color[va][vb]==0)
            {
                Q.push(va);
                Q.push(vb);
                color[va][vb]=1;
                str[va][vb]='#';
            }

        }
    }
}

int main()
{
    int i,j,a,b;
    while(scanf("%d%d",&W,&H)==2)
    {
        getchar();
        for(i=0; i<H; i++)
        {
            for(j=0; j<W; j++)
            {
                scanf("%c",&str[i][j]);
                if(str[i][j]=='P')
                {
                    a=i;
                    b=j;
                }
            }
            getchar();
        }

        for(i=0;i<H;i++)
        {
            for(j=0;j<W;j++)
            {
                if(str[i][j]=='T')
                {
                    color[i][j+1]=1;
                    color[i][j-1]=1;
                    color[i+1][j]=1;
                    color[i-1][j]=1;
                }
            }

        }
        counter=0;
        if(color[a][b]==1)
        {
            printf("0\n");
            memset(color,0,sizeof(color));
            continue;
        }

        BFS(a,b);

        printf("%d\n",counter);

        memset(color,0,sizeof(color));

    }
    return 0;
}

0 comments: (+add yours?)