标(sx,sy) int direct[MAXM]; // int xx[]={-1,1,0,0},yy[]={0,0,-1,1}; bool inQueue[MAXN][MAXN][MAXM]; //判重用数组,inQueue[i][j][n]=true表示车子在(i,j),正在用第n个方向的状态在队列里 bool inMap(int x,int y) //判定(x,y)是否在棋盘内 { if(x<1||x>R||y<1||y>C) return false; return true; } void bfs() { inQueue[first.x][first.y][first.NumOfDir]=true; q[h]=first; //初始状态入队 while(h
n) //所有的方向都用完了 { map[now.x][now.y]=2; continue; } node next=now; next.NumOfDir++; while(1) { next.x+=xx[direct[now.NumOfDir]]; next.y+=yy[direct[now.NumOfDir]]; if(map[next.x][next.y]||!inMap(next.x,next.y)) break; if(!inQueue[next.x][next.y][next.NumOfDir]) { q[t++]=next; inQueue[next.x][next.y][next.NumOfDir]=true; } } } } int main() { char s[MAXN]; scanf("%d%d",&R,&C); for(int i=1;i<=R;i++) { scanf("%s",s+1); for(int j=1;j<=C;j++) { if(s[j]=='X') map[i][j]=1; else if(s[j]=='*') { sx=i; sy=j; } } } scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%s",s); if(s[0]=='N') direct[i]=0; if(s[0]=='S') direct[i]=1; if(s[0]=='W') direct[i]=2; if(s[0]=='E') direct[i]=3; } first.x=sx,first.y=sy; first.NumOfDir=1; bfs(); for(int i=1;i<=R;i++) { for(int j=1;j<=C;j++) { if(map[i][j]==0) printf("."); if(map[i][j]==1) printf("X"); if(map[i][j]==2) printf("*"); } printf("\n"); } return 0; }
??
|