HDU 3912 Turn Right

来源:互联网 发布:ps淘宝美工修图视频 编辑:程序博客网 时间:2024/06/05 16:55

     一道单纯的模拟题,说的是一个人从起点去往终点,然后再由终点回到起点,判断其是否能够走完全部的点。

     在行走的过程中存在规则,在一个位置优先走右,然后是前和左,最后是后。

     注意:不是走到终点边缘的格子就ok了,还要判断方向(卡了我好久T_T)。

#include <cstdio>#include <string>#include <cstring>#include <iostream>#include <algorithm>bool maps[550][550][4];bool vis[550][550];int R,C,en,ex;int gox[4][4]={{1,0,-1,0},{0,-1,0,1},{-1,0,1,0},{0,1,0,-1}};int goy[4][4]={{0,1,0,-1},{1,0,-1,0},{0,-1,0,1},{-1,0,1,0}};int dfs(int x,int y,int endx,int endy,int hx){  //printf("x=%d y=%d hx=%d\n",x,y,hx);  //system("pause");  while (1){    int hy=1;    for (int i=0;i<4;i++){      int x0=x+gox[hx][i];      int y0=y+goy[hx][i];      if (x0==endx&&y0==endy) return 0;      if (!maps[x][y][(hx+i+3)%4]&&x0>=0&&x0<R&&y0>=0&&y0<C){        vis[x0][y0]=true;        //printf("%d %d %d %d %d\n",x0,y0,i,(hx+i+3)%4,maps[x][y][(hx+i+3)%4]);        x=x0;y=y0;hx=(hx+i+3)%4;        //printf("x=%d y=%d hx=%d\n",x,y,hx);        //system("pause");        //dfs(x0,y0,endx,endy,(hx+i+3)%4);        hy=0;        break;     }   }   if (hy) break;  }  return 0;}int main (){  int T;scanf("%d",&T);  while (T--){    memset(vis,0,sizeof(vis));    scanf("%d%d",&R,&C);    for (int i=0;i<R;i++)      for (int j=0;j<C;j++)        vis[i][j]=maps[i][j][0]=maps[i][j][1]=maps[i][j][2]=maps[i][j][3]=false;    scanf("%d%d",&en,&ex);    for (int i=0;i<2*R-1;i++){      if (i%2==0){        for (int j=0;j<C-1;j++){            int a;scanf("%d",&a);            if (a){              maps[i/2][j][0]=maps[i/2][j+1][2]=true;            }        }      }      else {        for (int j=0;j<C;j++){          int a;scanf("%d",&a);          if (a) {            maps[i/2][j][3]=maps[i/2+1][j][1]=true;          }        }      }    }   // for (int i=0;i<4;i++){   //   printf("%d %d %d %d\n",gox[i][0],gox[i][1],gox[i][2],gox[i][3]);   // }   dfs(0,en,R,ex,3);   dfs(R-1,ex,-1,en,1);    int ans=1;    for (int i=0;i<R;i++)      for (int j=0;j<C;j++)        if (!vis[i][j]) {ans=0;break;}    if (ans) printf("YES\n");    else printf("NO\n");  }  return 0;}


0 0
原创粉丝点击