Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <queue>
- using namespace std;
- class step
- {
- public:
- int x,y,vx,vy,steps;
- step(int,int,int,int,int);
- };
- step::step (int a, int b, int c, int d, int e)
- {
- x=a; y=b;
- vx=c; vy=d;
- steps=e;
- }
- void setdeltavlimits(int& min_delta_v, int& max_delta_v, int v)
- {
- switch(v)
- {
- case -3:
- min_delta_v=0; max_delta_v=1;
- case 3:
- min_delta_v=-1; max_delta_v=0;
- default:
- min_delta_v=-1; max_delta_v=1;
- }
- }
- bool legalcoords(int x, int y, int new_x, int new_y)
- {
- bool islegal=1;
- x--;
- y--;
- if(new_x<0) islegal=0;
- if(new_x>x) islegal=0;
- if(new_y<0) islegal=0;
- if(new_y>y) islegal=0;
- return islegal;
- }
- int pogoRace()
- {
- int n,x,y,min_delta_vx,max_delta_vx,min_delta_vy,max_delta_vy,new_x,new_y,new_vx,new_vy;
- scanf("%d %d %d",&n,&x,&y);
- char map[x][y];
- bool visited[x][y][7][7];
- for(int i=0;i<y;i++) for(int j=0;j<x;j++) scanf("%d", &map[x][y]);
- queue<step> Q;
- for(int i=y-1;i>=0;i--) for(int j=x-1;j>=0;j--)
- {
- if(map[j][i]='S')
- {
- visited[j][i][3][3]=true;
- Q.push(step(x,y,0,0,0));
- j=0;
- i=0;
- }
- }
- while(!Q.empty())
- {
- setdeltavlimits(min_delta_vx,max_delta_vx,Q.front().vx);
- setdeltavlimits(min_delta_vy,max_delta_vy,Q.front().vy);
- for(int i=min_delta_vx;i<=max_delta_vx;i++)
- {
- for(int j=min_delta_vy;j<=max_delta_vx;j++)
- {
- new_vx=Q.front().vx+i;
- new_vy=Q.front().vy+j;
- new_x=Q.front().x+new_vx;
- new_y=Q.front().y+new_vy;
- if(legalcoords(new_x,new_y,x,y))
- {
- if(visited[new_x][new_y][new_vx+3][new_vy+3]==false)
- {
- if(map[new_x][new_y]=='.')
- {
- Q.push(step(new_x,new_y,new_vx,new_vy,Q.front().steps+1));
- visited[new_x][new_y][new_vx+3][new_vy+3]=true;
- }
- else if(map[new_x][new_y]=='Z') return Q.front().steps+1;
- }
- }
- }
- }
- Q.pop();
- }
- return -1;
- }
- int main()
- {
- int testCount;
- scanf("%d", &testCount);
- while(testCount--) printf("%d\n",pogoRace());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement