light 1012 Guilty Prince

  题意:一共有 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\n",cas++,ans);
    }
    return 0;
}

 

posted @ 2013-09-01 21:51  yongren1zu  阅读(126)  评论(0编辑  收藏  举报