Open In App

Check if a Queen can attack a given cell on chessboard

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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 <iostream>
using namespace std;
 
// Function that returns true if the queen
// can attack the opponent
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 (abs(qR - oR) == abs(qC - oC))
        return true;
 
    // Opponent is safe
    return false;
}
 
// Driver code
int 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 approach
class GFG
{
     
// Function that returns true if the queen
// can attack the opponent
static 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 code
public 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 opponent
def 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
if __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 approach
using System;
class GFG
{
     
// Function that returns true if the queen
// can attack the opponent
static 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 code
public 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
// PHP implementation of the approach
 
// Function that returns true if the
// queen can attack the opponent
function 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
?>


Javascript




<script>
 
// JavaScript implementation of the approach
 
 
// Function that returns true if the queen
// can attack the opponent
function 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>


Output: 

No

 

Time complexity: O(1)
Auxiliary space: O(1)



Last Updated : 21 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads