Check if a Queen can attack a given cell on chessboard - GeeksforGeeks

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++
Java
Python3
C#
PHP
Javascript
// C++ implementation of the approach#include <iostream>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 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 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# 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.
<?php// PHP implementation of the approach // Function that returns true if the// queen can attack the opponentfunction 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 code$qR = 1; $qC = 1;$oR = 3; $oC = 2; if (canQueenAttack($qR, $qC, $oR, $oC))    echo "Yes";else    echo "No"; // This code is contributed// by Akanksha Rai?>
<script> // JavaScript implementation of the approach  // Function that returns true if the queen// can attack the opponentfunction 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 (Math.abs(qR - oR) == Math.abs(qC - oC))        return true;     // Opponent is safe    return false;} // Driver code     var qR = 1, qC = 1;    var oR = 3, oC = 2;              if (canQueenAttack(qR, qC, oR, oC))        document.write("Yes");    else         document.write("No");              // This Code is Contributed by Harshit Srivastava         </script>
No
 
rituraj_jain
Akanksha_Rai
Code_Mech
srivastavaharshit848
chessboard-problems
Cisco
Competitive Programming
Cisco
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Formatted output in Java
Breadth First Traversal ( BFS ) on a 2D array
What is Competitive Programming and How to Prepare for It?
Understanding The Coin Change Problem With Dynamic Programming
Use of FLAG in programming
Shortest path in a directed graph by Dijkstra’s algorithm
Setting up Sublime Text for C++ Competitive Programming Environment
Fast I/O in Java in Competitive Programming
Runtime Errors
How to overcome Time Limit Exceed(TLE)?