首页 > 学院 > 开发设计 > 正文

LightOJ 1337

2019-11-08 02:42:22
字体:
来源:转载
供稿:网友
#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;//the crystal mazechar map[505][505];bool vis[505][505];int dir[4][2]={    {0,1},    {0,-1},    {1,0},    {-1,0}};int ans,n,m,x1[505*505],y1[505*505],top,an[505][505];void dfs(int x,int y){    vis[x][y]=1;    if(map[x][y]=='C')        ans++;    x1[top]=x,y1[top++]=y;    for(int i=0;i<4;i++)    {        int nx=x+dir[i][0];        int ny=y+dir[i][1];        if(nx>=0&&nx<n&&ny>=0&&ny<m&&!vis[nx][ny]&&map[nx][ny]!='#')            dfs(nx,ny);    }}int main(){    int ca,cas=1,q;    cin>>ca;    while(ca--)    {        scanf("%d%d%d",&n,&m,&q);        for(int i=0;i<n;i++)        {            for(int j=0;j<m;j++)                cin>>map[i][j];                //scanf("%c",&map[i][j]);        }        memset(vis,0,sizeof(vis));        memset(an,-1,sizeof(an));        //优化: an[x][y] 表示以(x,y)为7点的答案,初始化为-1,        //如果:an[x][y]!=-1,则表示已经计算过了,直接输出即可        int x,y;        PRintf("Case %d:/n",cas++);        while(q--)        {            scanf("%d%d",&x,&y);            if(an[x-1][y-1]==-1)            {                top=0,                ans=0,                dfs(x-1,y-1);            }            for(int r=0;r<top;r++)                an[x1[r]][y1[r]]=ans;            printf("%d/n",an[x-1][y-1]);        }    }    return 0;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表