网易游戏2016实习生招聘笔试题--推箱子
题目描述

1 #include <iostream> 2 #include <string> 3 #include <vector> 4 using namespace std; 5 int N,M; 6 int x0,y0; 7 //-1 不移动 0表示移动 1表示到达目标 8 int move(char c,vector<vector<int>>&a) 9 { 10 int nx=x0,ny=y0; 11 int nnx=x0,nny=y0; 12 if(c=='l') 13 { 14 nx--; 15 if(nx<0||a[ny][nx]==4) 16 { 17 return -1; 18 } 19 else if(a[ny][nx]==0) 20 { 21 x0=nx; 22 } 23 else if(a[ny][nx]==3) 24 { 25 nnx=nx-1; 26 if(nnx<0||a[nnx][ny]==4) 27 return -1; 28 else if(a[ny][nnx]==2) 29 { 30 return 1; 31 } 32 else 33 { 34 x0=nx; 35 a[ny][nx]=0; 36 a[ny][nnx]=3; 37 } 38 39 } 40 else if(a[ny][nx]==2) 41 { 42 x0=nx; 43 } 44 } 45 else if(c=='r') 46 { 47 nx++; 48 if(nx==N||a[ny][nx]==4) 49 { 50 return -1; 51 } 52 else if(a[ny][nx]==0) 53 { 54 x0=nx; 55 } 56 else if(a[ny][nx]==3) 57 { 58 nnx=nx+1; 59 if(nnx==N||a[ny][nnx]==4) 60 return -1; 61 else if(a[ny][nnx]==2) 62 { 63 return 1; 64 } 65 else 66 { 67 x0=nx; 68 a[ny][nx]=0; 69 a[ny][nnx]=3; 70 } 71 72 } 73 else if(a[ny][nx]==2) 74 { 75 x0=nx; 76 } 77 } 78 else if(c=='u') 79 { 80 ny--; 81 if(ny<0||a[ny][nx]==4) 82 { 83 return-1; 84 } 85 else if(a[ny][nx]==0) 86 { 87 y0=ny; 88 } 89 else if(a[ny][nx]==3) 90 { 91 nny=ny-1; 92 if(nny<0||a[nny][nx]==4) 93 return -1; 94 else if(a[nny][nx]==2) 95 { 96 return 1; 97 } 98 else 99 { 100 y0=ny; 101 a[ny][nx]=0; 102 a[nny][nx]=3; 103 } 104 } 105 else if(a[ny][nx]==2) 106 { 107 y0=ny; 108 } 109 } 110 else if(c=='d') 111 { 112 ny++; 113 if(nx==M||a[ny][nx]==4) 114 { 115 return -1; 116 } 117 else if(a[ny][nx]==0) 118 { 119 y0=ny; 120 } 121 else if(a[ny][nx]==3) 122 { 123 nny=ny+1; 124 if(nny==M||a[nny][nx]==4) 125 return -1; 126 else if(a[nny][nx]==2) 127 { 128 return 1; 129 } 130 else 131 { 132 y0=ny; 133 a[ny][nx]=0; 134 a[nny][nx]=3; 135 } 136 } 137 else if(a[ny][nx]==2) 138 { 139 y0=ny; 140 } 141 } 142 return 0; 143 } 144 int main() 145 { 146 int S,T; 147 int _x,_y; 148 string str; 149 cin>>N>>M>>S; 150 vector<vector<int>> b(M,vector<int>(N)); 151 vector<vector<int>> a; 152 for(int i=0;i<M;i++) 153 { 154 for(int j=0;j<N;j++) 155 { 156 cin>>b[i][j]; 157 if(b[i][j]==1) 158 { 159 _y=i; 160 _x=j; 161 b[i][j]==0; 162 } 163 } 164 } 165 for(int i=0;i<S;i++) 166 { 167 x0=_x; 168 y0=_y; 169 a=b; 170 cin>>T; 171 cin>>str; 172 bool flag=true; 173 for(int j=0;j<T;j++) 174 { 175 if(1==move(str[j],a)) 176 { 177 cout<<"YES"<<endl; 178 flag=false; 179 break; 180 } 181 } 182 if(flag) 183 cout<<"NO"<<endl; 184 } 185 186 return 0; 187 } 188 189 /* 190 6 4 2 191 4 0 0 4 4 4 192 4 0 3 4 0 0 193 4 0 1 0 0 0 194 4 0 0 0 0 2 195 12 luuurddldrrr 196 13 luurdldrrrurd 197 198 */

浙公网安备 33010602011771号