uva live 6479

来源:互联网 发布:淘宝宝贝怎么设置套餐 编辑:程序博客网 时间:2024/05/17 21:53

https://icpcarchive.ecs.baylor.edu/external/64/6479.pdf

思路:我们将操作换个说法,叫激活吧,A被激活为B,B被激活为C,C被激活为D,D被激活的话,他就会激活四周的人,但每次输入地图上每个人只能被激活一次。

代码:

#include<iostream>#include<cstdio>#include<cmath>#include<queue>#include<set>#include<cstring>#include<algorithm>#define LL long long#define MOD 100000007#define INF 0x3f3f3f3fusing namespace std;int n,m;char g[105][105];bool done[105][105];bool is_ill(int x,int y){    if(x<0||y<0||x>=n||y>=m)return 1;    return 0;}int opp[]={1,0,3,2};int dx[]={0,0,1,-1};int dy[]={1,-1,0,0};void solve(int x,int y,int dir){    if(g[x][y]=='X')return ;    if(g[x][y]!='D')    {        g[x][y]++;        return ;    }    if(!done[x][y])    {        done[x][y]=1;        for(int i=0;i<4;i++)        if(opp[i]!=dir)        {            int curx=x+dx[i];            int cury=y+dy[i];            if(curx==5&&cury==4&&i==2)            {                int cc=0;            }            if(is_ill(curx,cury))continue;            solve(curx,cury,i);        }    }}int main(){    int T,k;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&m,&n);        for(int i=0;i<n;i++)            scanf("%s",g[i]);        scanf("%d",&k);        int x,y;        while(k--)        {            memset(done,0,sizeof done);            scanf("%d%d",&y,&x);            solve(x,y,-1);        }        int vv=0;        for(int i=0;i<n;i++)            puts(g[i]);    }    return 0;}


0 0
原创粉丝点击