题意:一共有 T 组测试数据,每组先给两个数,w,h,表示给一个 高h,宽w的矩阵,‘#’表示不能走,‘.’表示能走,‘@’表示起始点,问,从起始点出发能访问多少个点。
简单的BFS题,以前做过一次。
#include<stdio.h> #include<string.h> struct node{ int x,y; }; node q[450]; int head,tail; int visit[25][25]; int dx[]={1,0,-1,0}; int dy[]={0,1,0,-1}; int w,h; int sx,sy; int ans; int OK(int x,int y) { if(x>=1 && x<=h && y>=1 && y<=w && !visit[x][y]) return 1; return 0; } void Deal() { head=tail=0; node t,t1; t.x=sx;t.y=sy; q[++tail]=t; visit[sx][sy]=1; ans=1; while(head<tail) { t=q[++head]; for(int i=0;i<4;i++) { int xx=t.x+dx[i]; int yy=t.y+dy[i]; if(OK(xx,yy)) { ans++; visit[xx][yy]=1; t1.x=xx;t1.y=yy; q[++tail]=t1; } } } } int main() { int T,cas=1; char ch[25]; scanf("%d",&T); while(T--) { memset(visit,0,sizeof(visit)); scanf("%d%d",&w,&h); for(int i=1;i<=h;i++) { scanf("%s",ch+1); for(int j=1;j<=w;j++) { if(ch[j]=='#') visit[i][j]=1; if(ch[j]=='@') sx=i,sy=j; } } Deal(); printf("Case %d: %d ",cas++,ans); } return 0; }