Easy readable bfs sol c++

google
Tags: #<Tag:0x00007f1826168088>

#1
bool valid(int i,int j,int A,int B){
    if(i>=1 && i<=A && j>=1 && j<=B)return true;
    return false;
}
int Solution::knight(int A, int B, int C, int D, int E, int F) {
    int vis[A+1][B+1];
        for(int i=1;i<=A;i++){
            for(int j=1;j<=B;j++){
                vis[i][j]=INT_MAX;
            }
        }
    vis[C][D]=1;
    queue<pair<int,int>>q;
    q.push({C,D});
    int X[8]={-1,1,-2,2,-2,2,1,-1};
    int Y[8]={2,2,1,1,-1,-1,-2,-2};
    vis[C][D]=0;
    while(q.size()){
        int x=q.front().first;
        int y=q.front().second;
        q.pop();
        for(int i=0;i<8;i++){
            if(valid(x+X[i],y+Y[i],A,B) && vis[x+X[i]][y+Y[i]]==INT_MAX){
                vis[x+X[i]][y+Y[i]]=min(vis[x+X[i]][y+Y[i]],1+vis[x][y]);
                q.push({x+X[i],y+Y[i]});
            }
        }
    }
    if(vis[E][F]==INT_MAX)return -1;
    return vis[E][F];
}