题意:一共有 T 组测试数据,每组先给两个数,w,h,表示给一个 高h,宽w的矩阵,‘#’表示不能走,‘.’表示能走,‘@’表示起始点,问,从起始点出发能访问多少个点。

  简单的BFS题,以前做过一次。

#include<stdio.h>
#include<string.h> struct node{
int x,y;
};
node q[];
int head,tail;
int visit[][];
int dx[]={,,-,};
int dy[]={,,,-};
int w,h;
int sx,sy;
int ans;
int OK(int x,int y)
{
if(x>= && x<=h && y>= && y<=w && !visit[x][y])
return ;
return ;
}
void Deal()
{
head=tail=; node t,t1;
t.x=sx;t.y=sy;
q[++tail]=t;
visit[sx][sy]=;
ans=; while(head<tail)
{
t=q[++head]; for(int i=;i<;i++)
{
int xx=t.x+dx[i];
int yy=t.y+dy[i];
if(OK(xx,yy))
{
ans++;
visit[xx][yy]=;
t1.x=xx;t1.y=yy;
q[++tail]=t1;
}
}
}
}
int main()
{
int T,cas=;
char ch[];
scanf("%d",&T);
while(T--)
{
memset(visit,,sizeof(visit));
scanf("%d%d",&w,&h);
for(int i=;i<=h;i++)
{
scanf("%s",ch+);
for(int j=;j<=w;j++)
{
if(ch[j]=='#') visit[i][j]=;
if(ch[j]=='@') sx=i,sy=j;
}
}
Deal();
printf("Case %d: %d\n",cas++,ans);
}
return ;
}
04-13 18:46
查看更多