Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <queue>
- using namespace std;
- const int SIZE = 1000;
- int a[SIZE][SIZE],N;
- bool Out(int x,int y){return x<0||y<0||x>=N||y>=N;}
- int dx[4]={1,0,-1,0};
- int dy[4]={0,1,0,-1};
- int dp[SIZE][SIZE][2];
- int main(){
- scanf("%d",&N);
- for(int i=0;i<N;i++)
- for(int j=0;j<N;j++)scanf("%d",&a[i][j]);
- queue<int>qq;
- dp[0][0][0]=dp[0][0][1]=1;
- qq.push(0);
- qq.push(0);
- qq.push(0);
- qq.push(0);
- qq.push(0);
- qq.push(1);
- while(qq.size()){
- int x=qq.front();qq.pop();
- int y=qq.front();qq.pop();
- int v=qq.front();qq.pop();
- if(x==N-1&&y==N-1)return 0*printf("%d\n",dp[x][y][v]);
- for(int i=0;i<4;i++){
- int nx=x+dx[i];
- int ny=y+dy[i];
- if(Out(nx,ny))continue;
- if(dp[nx][ny][v^1])continue;
- if(v!=(a[x][y]<a[nx][ny]))continue;
- dp[nx][ny][v^1]=dp[x][y][v]+1;
- qq.push(nx);qq.push(ny);qq.push(v^1);
- }
- }
- return 0*puts("-1");
- }
Advertisement
Add Comment
Please, Sign In to add comment