Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define sf scanf
- #define pf printf
- #define inf INT_MAX
- #define dbg cout << "Debug" << endl;
- #define MAX 1024
- #define block -1
- #define white +0
- #define noway -3
- #define source -4
- #define goal -5
- using namespace std;
- long grid[ MAX ][ MAX ];
- int visited[ MAX ][ MAX ];
- int dx[] = { +0, -1, +0, +1 };
- int dy[] = { -1, +0, +1, +0 };
- int sx,sy,gx,gy,l,w,flag = false;
- void clr(){
- for( int i=1; i<=l; i++ ){
- for( int j=1; j<=w; j++ ){
- grid[i][j] = visited[i][j] = 0;
- }
- }
- flag = false;
- }
- bool isOk( int x, int y ){
- return ( x >= 1 && ( x <= l) && y >= 1 && (y<=w) );
- }
- bool isValid( int mdx, int mdy ){
- if( isOk(mdx,mdy) )
- }
- bool isNoMove( int x, int y , int pd ){
- for( int i=0; i<4; i++ ){
- int mx = dx[i] + x;
- int my = dy[i] + y;
- if( grid[mx][my] == white && isOk(mx,my) && isValid(i,pd) ) return false;
- }
- return true;
- }
- void solve( int x, int y, int pd , int c ){ // was a fuck
- if (grid[x][y] == goal ){
- grid[x][y]=c;
- flag = 1;
- return;
- }
- if ( isNoMove(x,y,pd) ){
- grid[x][y]=noway;
- return;
- }
- for ( int i = 0; i < 4; i++ ){
- int mdx = dx[i] + x;
- int mdy = dy[i] + y;
- if( isOk(mdx,mdy) && !flag && grid[mdx][mdy] <= 0 && isValid(mdx,mdy) ){
- solve(mdx,mdy,c+1);
- if( flag )grid[x][y] = c;
- else if( !flag ) grid[x][y] = noway;
- }
- }
- }
- int main(){
- #ifndef ONLINE_JUDGE
- freopen("in.txt","rt",stdin);
- freopen("out.txt","wt",stdout);
- #endif
- while( sf("%d %d %d %d %d %d", &l,&w,&sx,&sy,&gx,&gy) , l+w+sx+sy+gx+gy ){
- clr();
- grid[sx][sy] = source; grid[gx][gy] = goal;
- for( int i=1; i<=l; i++ ){
- for( int j=1; j<=w; j++ ){
- sf( "%d",&visited[i][j] );
- }
- }
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement