HDU-2102 A计划

来源:互联网 发布:mysql 触发器 性能 编辑:程序博客网 时间:2024/05/23 12:04

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=2102

题意:

从S搜索到E有两张图,#处可以转换到另一张图,求是否能在T时间内走到。

思路:

就是基础的搜图,只是加了个两张图之间跳转罢了。

代码:

#define N 112int n,m;int flag,sum,ave,ans,res,len,ans1,ans2;int g[2][N][N],dir[4][2]={1,0,-1,0,0,1,0,-1};char s[101];struct node{    int x,y,z,step;}tn,e;bool bfs(){    queue<node>q;    while(!q.empty())q.pop();    node a,b;    tn.step=0;    q.push(tn);    while(!q.empty())    {        a=q.front();q.pop();        if(a.x==e.x&&a.y==e.y&&a.z==e.z)            return true;        if(a.step==sum)continue;        for(int i=0;i<4;i++)        {            b=a;b.x+=dir[i][0];b.y+=dir[i][1];b.step++;            if(g[b.z][b.x][b.y]==2)b.z^=1;            if(g[b.z][b.x][b.y]==1)            {                g[b.z][b.x][b.y]=0;                q.push(b);            }        }    }    return false;}int main(){    int i,j,k,kk,t,x,y,z;    scanf("%d",&kk);    while(kk--)    {        scanf("%d%d%d",&n,&m,&sum);        memset(g,0,sizeof(g));        for(k=0;k<2;k++)            for(i=0;i<n;i++)            {                scanf("%s",s);                for(j=0;j<m;j++)                {                    if(s[j]=='*')continue;                    if(s[j]=='S')                        tn.x=i+1,tn.y=j+1,tn.z=k;                    g[k][i+1][j+1]=1;                    if(s[j]=='P')                        e.x=i+1,e.y=j+1,e.z=k;                    if(s[j]=='#')                        g[k][i+1][j+1]=2;                }            }        printf("%s\n",bfs()?"YES":"NO");    }    return 0;}





0 0
原创粉丝点击