Dados dos números enteros N y M que indican las dimensiones de un tablero de ajedrez, y dos números enteros X e Y que indican la posición del rey, es decir, la celda (X, Y) . La tarea es encontrar el número de celdas que la Reina puede visitar que no son visitadas por el Rey si es reemplazada por el Rey. El Rey visita todas sus celdas adyacentes y la Reina puede moverse en diagonal, horizontal y verticalmente.
Ejemplos:
Entrada: N = 8, M = 8, X = 1, Y = 1
Salida: 18
Explicación:
A continuación se muestra la imagen para mostrar el movimiento del Rey y la Reina:Suponga que K representa al Rey y * representa las celdas visitadas por el rey y Q representa a la Reina y # representa las celdas visitadas por la reina.
Entonces, el total de cuadrados que puede visitar la reina es 18.Entrada: N = 2, M = 1, X = 1, Y = 1
Salida: 0
Enfoque: La idea es encontrar primero el número total de posiciones que la Reina puede visitar. Luego encuentra el número total de posiciones que el Rey puede visitar. El número de celdas que solo puede visitar la Reina será el número de celdas que el Rey puede visitar restado del número de celdas que la Reina puede visitar. Siga los pasos a continuación para resolver el problema:
- Inicialice queenMoves por 0 y calcule los movimientos totales de la Reina de la siguiente manera:
Si N – X > 0 y M – Y > 0, JugadasReina = JugadasReina + min(N – X, M – Y)
Si X – 1 > 0 y Y – 1 > 0, JugadasReina = JugadasReina + min(Y – 1, X – 1)
Si X – 1 > 0 y M – Y > 0, JugadasReina = JugadasReina + min(X – 1, M – Y)
Si N – X > 0 y Y – 1 > 0, JugadasReina = JugadasReina + min( N – X, Y – 1)
Por último, agregue la respuesta para los movimientos horizontales y verticales como QueenMoves = QueenMoves + (N – 1) + (M – 1)
- Inicialice kingMoves como 0 y calcule los movimientos de King de la siguiente manera:
Si X + 1 <= N, JugadasRey = JugadasRey + 1
Si X – 1 > 0, JugadasRey = JugadasRey + 1
Si Y + 1 <= M, JugadasRey = JugadasRey + 1
Si Y – 1 > 0, JugadasRey = JugadasRey + 1
Si X + 1 <= N e Y + 1 <= M, JugadasRey = JugadasRey + 1
Si X + 1 <= N e Y – 1 > 0, JugadasRey = JugadasRey + 1
Si X – 1 > 0 e Y – 1 > 0, JugadasRey = JugadasRey + 1
Si X – 1 > 0 y Y + 1 <= M, JugadasRey = JugadasRey + 1
- Imprime como resultado la diferencia absoluta entre la reina y el rey calculada en los pasos anteriores.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <iostream> using namespace std; // Function to print the number of cells // only visited by the queen int Moves_Calculator(int x, int y, int row, int col) { // Find all the moves int total_moves = 0; // Find all moves for x + 1, y + 1 if ((row - x) > 0 && (col - y) > 0) total_moves += min((row - x), (col - y)); // Find all moves for x - 1, y - 1 if ((y - 1) > 0 && (x - 1) > 0) total_moves += min((y - 1), (x - 1)); // Find all moves for x - 1, y + 1 if ((x - 1) > 0 && (col - y) > 0) total_moves += min((x - 1), (col - y)); // Find all moves for x + 1, y - 1 if ((row - x) > 0 && (y - 1) > 0) total_moves += min((row - x), (y - 1)); total_moves += (row - 1) + (col - 1); // Find all squares visited by King // x + 1, in same row int king_moves = 0; if (x + 1 <= row) king_moves += 1; // x - 1, in same row if (x - 1 > 0) king_moves += 1; // y + 1, in same column if (y + 1 <= col) king_moves += 1; // y - 1, in same column if (y - 1 > 0) king_moves += 1; if (x + 1 <= row && y + 1 <= col) king_moves += 1; if (x + 1 <= row && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y + 1 <= col) king_moves += 1; // Return answer return total_moves - king_moves; } // Driver Code int main() { // Dimension of Board int n = 8, m = 8; // Position of Cell int x = 1, y = 1; // Function Call cout << (Moves_Calculator(x, y, m, n)); return 0; } // This code is contributed by akhilsaini
Java
// Java program for the above approach import java.io.*; class GFG{ // Function to print the number of cells // only visited by the queen static int Moves_Calculator(int x, int y, int row, int col) { // Find all the moves int total_moves = 0; // Find all moves for x + 1, y + 1 if ((row - x) > 0 && (col - y) > 0) total_moves += Math.min((row - x), (col - y)); // Find all moves for x - 1, y - 1 if ((y - 1) > 0 && (x - 1) > 0) total_moves += Math.min((y - 1), (x - 1)); // Find all moves for x - 1, y + 1 if ((x - 1) > 0 && (col - y) > 0) total_moves += Math.min((x - 1), (col - y)); // Find all moves for x + 1, y - 1 if ((row - x) > 0 && (y - 1) > 0) total_moves += Math.min((row - x), (y - 1)); total_moves += (row - 1) + (col - 1); // Find all squares visited by King // x + 1, in same row int king_moves = 0; if (x + 1 <= row) king_moves += 1; // x - 1, in same row if (x - 1 > 0) king_moves += 1; // y + 1, in same column if (y + 1 <= col) king_moves += 1; // y - 1, in same column if (y - 1 > 0) king_moves += 1; if (x + 1 <= row && y + 1 <= col) king_moves += 1; if (x + 1 <= row && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y + 1 <= col) king_moves += 1; // Return answer return total_moves - king_moves; } // Driver Code public static void main(String[] args) { // Dimension of Board int n = 8, m = 8; // Position of Cell int x = 1, y = 1; // Function Call System.out.println(Moves_Calculator(x, y, m, n)); } } // This code is contributed by akhilsaini
Python3
# Python3 program for the above approach # Function to print the number of cells # only visited by the queen def Moves_Calculator(x, y, row, col): # Find all the moves total_moves = 0 # Find all moves for x + 1, y + 1 if (row - x) > 0 and (col - y) > 0: total_moves += min((row - x), (col - y)) # Find all moves for x - 1, y - 1 if (y - 1) > 0 and (x - 1) > 0: total_moves += min((y - 1), (x - 1)) # Find all moves for x - 1, y + 1 if (x - 1) > 0 and (col - y) > 0: total_moves += min((x - 1), (col - y)) # Find all moves for x + 1, y - 1 if (row - x) > 0 and (y - 1) > 0: total_moves += min((row - x), (y - 1)) total_moves += (row - 1) + (col - 1) # Find all squares visited by King # x + 1, in same row king_moves = 0 if x + 1 <= m: king_moves += 1 # x - 1, in same row if x - 1 > 0: king_moves += 1 # y + 1, in same column if y + 1 <= n: king_moves += 1 # y - 1, in same column if y - 1 > 0: king_moves += 1 if x + 1 <= m and y + 1 <= n: king_moves += 1 if x + 1 <= m and y - 1 > 0: king_moves += 1 if x - 1 > 0 and y - 1 > 0: king_moves += 1 if x - 1 > 0 and y + 1 <= n: king_moves += 1 # Return answer return total_moves - king_moves # Driver Code if __name__ == '__main__': # Dimension of Board n, m = 8, 8 # Position of Cell x, y = 1, 1 # Function Call print(Moves_Calculator(x, y, m, n))
C#
// C# program for the above approach using System; class GFG{ // Function to print the number of cells // only visited by the queen static int Moves_Calculator(int x, int y, int row, int col) { // Find all the moves int total_moves = 0; // Find all moves for x + 1, y + 1 if ((row - x) > 0 && (col - y) > 0) total_moves += Math.Min((row - x), (col - y)); // Find all moves for x - 1, y - 1 if ((y - 1) > 0 && (x - 1) > 0) total_moves += Math.Min((y - 1), (x - 1)); // Find all moves for x - 1, y + 1 if ((x - 1) > 0 && (col - y) > 0) total_moves += Math.Min((x - 1), (col - y)); // Find all moves for x + 1, y - 1 if ((row - x) > 0 && (y - 1) > 0) total_moves += Math.Min((row - x), (y - 1)); total_moves += (row - 1) + (col - 1); // Find all squares visited by King // x + 1, in same row int king_moves = 0; if (x + 1 <= row) king_moves += 1; // x - 1, in same row if (x - 1 > 0) king_moves += 1; // y + 1, in same column if (y + 1 <= col) king_moves += 1; // y - 1, in same column if (y - 1 > 0) king_moves += 1; if (x + 1 <= row && y + 1 <= col) king_moves += 1; if (x + 1 <= row && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y + 1 <= col) king_moves += 1; // Return answer return total_moves - king_moves; } // Driver Code public static void Main() { // Dimension of Board int n = 8, m = 8; // Position of Cell int x = 1, y = 1; // Function Call Console.WriteLine(Moves_Calculator(x, y, m, n)); } } // This code is contributed by akhilsaini
Javascript
<script> // Javascript program for the above approach // Function to print the number of cells // only visited by the queen function Moves_Calculator(x, y, row, col) { // Find all the moves let total_moves = 0; // Find all moves for x + 1, y + 1 if ((row - x) > 0 && (col - y) > 0) total_moves += Math.min((row - x), (col - y)); // Find all moves for x - 1, y - 1 if ((y - 1) > 0 && (x - 1) > 0) total_moves += Math.min((y - 1), (x - 1)); // Find all moves for x - 1, y + 1 if ((x - 1) > 0 && (col - y) > 0) total_moves += Math.min((x - 1), (col - y)); // Find all moves for x + 1, y - 1 if ((row - x) > 0 && (y - 1) > 0) total_moves += Math.min((row - x), (y - 1)); total_moves += (row - 1) + (col - 1); // Find all squares visited by King // x + 1, in same row let king_moves = 0; if (x + 1 <= row) king_moves += 1; // x - 1, in same row if (x - 1 > 0) king_moves += 1; // y + 1, in same column if (y + 1 <= col) king_moves += 1; // y - 1, in same column if (y - 1 > 0) king_moves += 1; if (x + 1 <= row && y + 1 <= col) king_moves += 1; if (x + 1 <= row && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y - 1 > 0) king_moves += 1; if (x - 1 > 0 && y + 1 <= col) king_moves += 1; // Return answer return total_moves - king_moves; } // Driver code // Dimension of Board let n = 8, m = 8; // Position of Cell let x = 1, y = 1; // Function Call document.write(Moves_Calculator(x, y, m, n)); // This code is contributed by splevel62 </script>
18
Tiempo Complejidad: O(1)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por anmolsingh1899 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA