本文共 1264 字,大约阅读时间需要 4 分钟。
题目:
wa了很多次,很悲剧,传送门有几个需要注意的细节,看remap函数,对这些情况的处理。
#include #include #include #include #include #include #include #include using namespace std;int n,m,t,flag;int dir[4][2]={-1,0,1,0,0,1,0,-1};char maze[2][11][11];bool visit[2][11][11];struct node{ int x,y,h; int step;}p,q,endp;queue Q;bool isbond(node &a){ if(a.x<0||a.x>=m||a.y<0||a.y>=n)return 1; return 0;}void bfs(){ while(!Q.empty())Q.pop(); p.x=p.y=p.h=p.step=0; visit[0][0][0]=1; Q.push(p); while(!Q.empty()) { p=Q.front(); Q.pop(); if(maze[p.h][p.x][p.y]=='#'){ //传送 if(!visit[!p.h][p.x][p.y]){ if(maze[!p.h][p.x][p.y]=='P'){ if(p.step<=t){ flag=1; return ; } return ; } visit[!p.h][p.x][p.y]=1; p.h=!p.h; Q.push(p); } continue; } for(int i=0;i<4;i++) { q.x=p.x+dir[i][0]; q.y=p.y+dir[i][1]; q.h=p.h; q.step=p.step+1; if(isbond(q))continue; // 边界 if(maze[q.h][q.x][q.y]=='*')continue; //当前障碍 if(visit[q.h][q.x][q.y])continue; //访问 if(maze[q.h][q.x][q.y]=='P'){ if(q.step<=t){ flag=1; return ; } return ; } visit[q.h][q.x][q.y]=1; Q.push(q); } }}void remap(){ for(int i=0;i >c; while(c--) { cin>>n>>m>>t; for(int i=0;i >maze[0][i][j]; } for(int i=0;i >maze[1][i][j]; } flag=0; memset(visit,0,sizeof(visit)); remap(); bfs(); if(flag)cout<<"YES"<
转载地址:http://jpfzo.baihongyu.com/