Check if a Queen can attack a given cell on chessboard

• Difficulty Level : Easy
• Last Updated : 05 May, 2021

Given the position of the queen (qX, qY) and the opponent (oX, oY) on a chessboard. The task is to determine whether the queen can attack the opponent or not. Note that the queen can attack in the same row, same column and diagonally.
Example:

Input: qX = 4, qY = 5, oX = 6, oY = 7
Output: Yes
The queen can attack diagonally.
Input: qX = 1, qY = 1, oX = 3, oY = 2
Output: No

Approach:

• If qR = oR, it means that both the queen and the opponent are in the same row and the queen can attack the opponent.
• Similarly, if qC = oC then also the queen can attack the opponent as they both are in the same column.
• And for diagonals, if abs(qR – oR) = abs(qC – oC) i.e. queen can attack the opponent diagonally.

If all of the above conditions fail then the opponent is safe from the queen.
Below is the implementation of the above approach:

C++

 // C++ implementation of the approach#include using namespace std; // Function that returns true if the queen// can attack the opponentbool canQueenAttack(int qR, int qC, int oR, int oC){    // If queen and the opponent are in the same row    if (qR == oR)        return true;     // If queen and the opponent are in the same column    if (qC == oC)        return true;     // If queen can attack diagonally    if (abs(qR - oR) == abs(qC - oC))        return true;     // Opponent is safe    return false;} // Driver codeint main(){    int qR = 1, qC = 1;    int oR = 3, oC = 2;    if (canQueenAttack(qR, qC, oR, oC))        cout << "Yes";    else        cout << "No";     return 0;}

Java

 // Java implementation of the approachclass GFG{     // Function that returns true if the queen// can attack the opponentstatic boolean canQueenAttack(int qR, int qC,                                int oR, int oC){    // If queen and the opponent    // are in the same row    if (qR == oR)        return true;     // If queen and the opponent    // are in the same column    if (qC == oC)        return true;     // If queen can attack diagonally    if (Math.abs(qR - oR) == Math.abs(qC - oC))        return true;     // Opponent is safe    return false;} // Driver codepublic static void main(String[] args){    int qR = 1, qC = 1;    int oR = 3, oC = 2;    if (canQueenAttack(qR, qC, oR, oC))        System.out.println("Yes");    else        System.out.println("No");}} // This code is Contributed by Code_Mech.

Python3

 # Python3 implementation of the approach # Function that returns True if the# queen can attack the opponentdef canQueenAttack(qR, qC, oR, oC):     # If queen and the opponent are    # in the same row    if qR == oR:        return True     # If queen and the opponent are    # in the same column    if qC == oC:        return True     # If queen can attack diagonally    if abs(qR - oR) == abs(qC - oC):        return True     # Opponent is safe    return False # Driver codeif __name__ == "__main__":     qR, qC = 1, 1    oR, oC = 3, 2    if canQueenAttack(qR, qC, oR, oC):        print("Yes")    else:        print("No")     # This code is contributed# by Rituraj Jain

C#

 // C# implementation of the approachusing System;class GFG{     // Function that returns true if the queen// can attack the opponentstatic bool canQueenAttack(int qR, int qC,                                int oR, int oC){    // If queen and the opponent    // are in the same row    if (qR == oR)        return true;     // If queen and the opponent    // are in the same column    if (qC == oC)        return true;     // If queen can attack diagonally    if (Math.Abs(qR - oR) == Math.Abs(qC - oC))        return true;     // Opponent is safe    return false;} // Driver codepublic static void Main(){    int qR = 1, qC = 1;    int oR = 3, oC = 2;    if (canQueenAttack(qR, qC, oR, oC))        Console.WriteLine("Yes");    else        Console.WriteLine("No");}} // This code is Contributed by Code_Mech.



Javascript


Output:
No

My Personal Notes arrow_drop_up