#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;
}
#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?)
Post a Comment