网易游戏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 */

 

posted @ 2016-09-17 16:15  wjliu  阅读(320)  评论(0)    收藏  举报