棋盘上有障碍物时,女王可以移动的单元格数

考虑一下 N×N 棋盘上有王后和王后 K 障碍。女王不能通过障碍物。给定皇后的位置(x,y),任务是找到皇后可以移动的细胞数量。

null

例如:

Input : N = 8, x = 4, y = 4,         K = 0Output : 27

图片[1]-棋盘上有障碍物时,女王可以移动的单元格数-yiteyi-C++库

Input : N = 8, x = 4, y = 4,         K = 1, kx1 = 3, ky1 = 5Output : 24

图片[2]-棋盘上有障碍物时,女王可以移动的单元格数-yiteyi-C++库

方法1: 这个想法是迭代女王可以攻击和停止的细胞,直到有障碍物或电路板的末端。要做到这一点,我们需要水平、垂直和对角地迭代。从位置(x,y)的移动可以是: (x+1,y):向右水平移动一步。 (x-1,y):向左水平移动一步。 (x+1,y+1):一步对角向右移动。 (x-1,y-1):一步斜移左下。 (x-1,y+1):一步斜向上向左移动。 (x+1,y-1):一步对角向下移动。 (x,y+1):向下一步。 (x,y-1):向上一步。

下面是C++实现这种方法:

C++

// C++ program to find number of cells a queen can move
// with obstacles on the chessborad
#include<bits/stdc++.h>
using namespace std;
// Return if position is valid on chessboard
int range( int n, int x, int y)
{
return (x <= n && x > 0 && y <= n && y > 0);
}
// Return the number of moves with a given direction
int check( int n, int x, int y, int xx, int yy,
map <pair< int , int >, int > mp)
{
int ans = 0;
// Checking valid move of Queen in a direction.
while (range(n, x, y) && ! mp[{x, y}])
{
x += xx;
y += yy;
ans++;
}
return ans;
}
// Return the number of position a Queen can move.
int numberofPosition( int n, int k, int x, int y,
int obstPosx[], int obstPosy[])
{
int x1, y1, ans = 0;
map <pair< int , int >, int > mp;
// Mapping each obstacle's position
while (k--)
{
x1 = obstPosx[k];
y1 = obstPosy[k];
mp[{x1, y1}] = 1;
}
// Fetching number of position a queen can
// move in each direction.
ans += check(n, x + 1, y, 1, 0, mp);
ans += check(n, x-1, y, -1, 0, mp);
ans += check(n, x, y + 1, 0, 1, mp);
ans += check(n, x, y-1, 0, -1, mp);
ans += check(n, x + 1, y + 1, 1, 1, mp);
ans += check(n, x + 1, y-1, 1, -1, mp);
ans += check(n, x-1, y + 1, -1, 1, mp);
ans += check(n, x-1, y-1, -1, -1, mp);
return ans;
}
// Driven Program
int main()
{
int n = 8; // Chessboard size
int k = 1; // Number of obstacles
int Qposx = 4; // Queen x position
int Qposy = 4; // Queen y position
int obstPosx[] = { 3 }; // x position of obstacles
int obstPosy[] = { 5 }; // y position of obstacles
cout << numberofPosition(n, k, Qposx, Qposy,
obstPosx, obstPosy) << endl;
return 0;
}


JAVA

// Java program to find number of cells a queen can move
// with obstacles on the chessborad
import java.util.*;
class GFG{
static class pair
{
int first, second;
public pair( int first, int second)
{
this .first = first;
this .second = second;
}
}
// Return if position is valid on chessboard
static boolean range( int n, int x, int y)
{
return (x <= n && x > 0 && y <= n && y > 0 );
}
// Return the number of moves with a given direction
static int check( int n, int x, int y, int xx, int yy,
HashMap <pair, Integer> mp)
{
int ans = 0 ;
// Checking valid move of Queen in a direction.
while (range(n, x, y) && ! mp.containsKey( new pair(x, y)))
{
x += xx;
y += yy;
ans++;
}
return ans;
}
// Return the number of position a Queen can move.
static int numberofPosition( int n, int k, int x, int y,
int obstPosx[], int obstPosy[])
{
int x1, y1, ans = 0 ;
HashMap <pair, Integer> mp = new HashMap<>();
// Mapping each obstacle's position
while (k> 0 )
{
k--;
x1 = obstPosx[k];
y1 = obstPosy[k];
mp.put( new pair(x1, y1), 1 );
}
// Fetching number of position a queen can
// move in each direction.
ans += check(n, x + 1 , y, 1 , 0 , mp);
ans += check(n, x- 1 , y, - 1 , 0 , mp);
ans += check(n, x, y + 1 , 0 , 1 , mp);
ans += check(n, x, y- 1 , 0 , - 1 , mp);
ans += check(n, x + 1 , y + 1 , 1 , 1 , mp);
ans += check(n, x + 1 , y- 1 , 1 , - 1 , mp);
ans += check(n, x- 1 , y + 1 , - 1 , 1 , mp);
return ans;
}
// Driven Program
public static void main(String[] args)
{
int n = 8 ; // Chessboard size
int k = 1 ; // Number of obstacles
int Qposx = 4 ; // Queen x position
int Qposy = 4 ; // Queen y position
int obstPosx[] = { 3 }; // x position of obstacles
int obstPosy[] = { 5 }; // y position of obstacles
System.out.print(numberofPosition(n, k, Qposx, Qposy,
obstPosx, obstPosy) + "" );
}
}
// This code contributed by Rajput-Ji


C#

// C# program to find number of cells a queen can move
// with obstacles on the chessborad
using System;
using System.Collections.Generic;
public class GFG{
public class pair
{
public int first, second;
public pair( int first, int second)
{
this .first = first;
this .second = second;
}
}
// Return if position is valid on chessboard
static bool range( int n, int x, int y)
{
return (x <= n && x > 0 && y <= n && y > 0);
}
// Return the number of moves with a given direction
static int check( int n, int x, int y, int xx, int yy,
Dictionary <pair, int > mp)
{
int ans = 0;
// Checking valid move of Queen in a direction.
while (range(n, x, y) && ! mp.ContainsKey( new pair(x, y)))
{
x += xx;
y += yy;
ans++;
}
return ans;
}
// Return the number of position a Queen can move.
static int numberofPosition( int n, int k, int x, int y,
int []obstPosx, int []obstPosy)
{
int x1, y1, ans = 0;
Dictionary <pair, int > mp = new Dictionary<pair, int >();
// Mapping each obstacle's position
while (k>0)
{
k--;
x1 = obstPosx[k];
y1 = obstPosy[k];
mp.Add( new pair(x1, y1), 1);
}
// Fetching number of position a queen can
// move in each direction.
ans += check(n, x + 1, y, 1, 0, mp);
ans += check(n, x-1, y, -1, 0, mp);
ans += check(n, x, y + 1, 0, 1, mp);
ans += check(n, x, y-1, 0, -1, mp);
ans += check(n, x + 1, y + 1, 1, 1, mp);
ans += check(n, x + 1, y-1, 1, -1, mp);
ans += check(n, x-1, y + 1, -1, 1, mp);
return ans;
}
// Driven Program
public static void Main(String[] args)
{
int n = 8; // Chessboard size
int k = 1; // Number of obstacles
int Qposx = 4; // Queen x position
int Qposy = 4; // Queen y position
int []obstPosx = { 3 }; // x position of obstacles
int []obstPosy = { 5 }; // y position of obstacles
Console.Write(numberofPosition(n, k, Qposx, Qposy,
obstPosx, obstPosy) + "" );
}
}
// This code is contributed by Rajput-Ji


Javascript

<script>
// javascript program to find number of cells a queen can move
// with obstacles on the chessborad
class pair {
constructor(first , second) {
this .first = first;
this .second = second;
}
}
// Return if position is valid on chessboard
function range(n , x , y) {
return (x <= n && x > 0 && y <= n && y > 0);
}
// Return the number of moves with a given direction
function check(n , x , y , xx , yy, mp) {
var ans = 0;
// Checking valid move of Queen in a direction.
while (range(n, x, y) && !mp.has( new pair(x, y))) {
x += xx;
y += yy;
ans++;
}
return ans;
}
// Return the number of position a Queen can move.
function numberofPosition(n , k , x , y , obstPosx , obstPosy) {
var x1, y1, ans = 0;
var mp = new Map();
// Mapping each obstacle's position
while (k > 0) {
k--;
x1 = obstPosx[k];
y1 = obstPosy[k];
mp.set( new pair(x1, y1), 1);
}
// Fetching number of position a queen can
// move in each direction.
ans += check(n, x + 1, y, 1, 0, mp);
ans += check(n, x - 1, y, -1, 0, mp);
ans += check(n, x, y + 1, 0, 1, mp);
ans += check(n, x, y - 1, 0, -1, mp);
ans += check(n, x + 1, y + 1, 1, 1, mp);
ans += check(n, x + 1, y - 1, 1, -1, mp);
ans += check(n, x - 1, y + 1, -1, 1, mp);
return ans;
}
// Driven Program
var n = 8; // Chessboard size
var k = 1; // Number of obstacles
var Qposx = 4; // Queen x position
var Qposy = 4; // Queen y position
var obstPosx = [ 3 ]; // x position of obstacles
var obstPosy = [ 5 ]; // y position of obstacles
document.write(numberofPosition(n, k, Qposx, Qposy, obstPosx, obstPosy) + "" );
// This code is contributed by Rajput-Ji
</script>


输出:

24

方法2: 我们的想法是在障碍物上迭代,对于那些在女王的道路上的人,我们计算到达障碍物的自由细胞。如果路径中没有障碍物,我们必须计算沿着该方向到达电路板末端的自由单元数。

任何(x) 1. Y 1. )和(x) 2. Y 2. ):

  • 如果它们水平处于同一水平:abs(x 1. –x 2. – 1)
  • 如果它们垂直于同一水平面:abs(y 1. –y 2. –1)是之间的自由单元数。
  • 如果是对角线:两个腹肌(x 1. –x 2. –1)或abs(y) 1. –y 2. –1)是之间的自由单元数。

以下是该方法的实施情况:

C++

// C++ program to find number of cells a queen can move
// with obstacles on the chessborad
#include <bits/stdc++.h>
using namespace std;
// Return the number of position a Queen can move.
int numberofPosition( int n, int k, int x, int y,
int obstPosx[], int obstPosy[])
{
// d11, d12, d21, d22 are for diagonal distances.
// r1, r2 are for vertical distance.
// c1, c2 are for horizontal distance.
int d11, d12, d21, d22, r1, r2, c1, c2;
// Initialise the distance to end of the board.
d11 = min( x-1, y-1 );
d12 = min( n-x, n-y );
d21 = min( n-x, y-1 );
d22 = min( x-1, n-y );
r1 = y-1;
r2 = n-y;
c1 = x-1;
c2 = n-x;
// For each obstacle find the minimum distance.
// If obstacle is present in any direction,
// distance will be updated.
for ( int i = 0; i < k; i++)
{
if ( x > obstPosx[i] && y > obstPosy[i] &&
x-obstPosx[i] == y-obstPosy[i] )
d11 = min(d11, x-obstPosx[i]-1);
if ( obstPosx[i] > x && obstPosy[i] > y &&
obstPosx[i]-x == obstPosy[i]-y )
d12 = min( d12, obstPosx[i]-x-1);
if ( obstPosx[i] > x && y > obstPosy[i] &&
obstPosx[i]-x == y-obstPosy[i] )
d21 = min(d21, obstPosx[i]-x-1);
if ( x > obstPosx[i] && obstPosy[i] > y &&
x-obstPosx[i] == obstPosy[i]-y )
d22 = min(d22, x-obstPosx[i]-1);
if ( x == obstPosx[i] && obstPosy[i] < y )
r1 = min(r1, y-obstPosy[i]-1);
if ( x == obstPosx[i] && obstPosy[i] > y )
r2 = min(r2, obstPosy[i]-y-1);
if ( y == obstPosy[i] && obstPosx[i] < x )
c1 = min(c1, x-obstPosx[i]-1);
if ( y == obstPosy[i] && obstPosx[i] > x )
c2 = min(c2, obstPosx[i]-x-1);
}
return d11 + d12 + d21 + d22 + r1 + r2 + c1 + c2;
}
// Driver code
int main( void )
{
int n = 8; // Chessboard size
int k = 1; // number of obstacles
int Qposx = 4; // Queen x position
int Qposy = 4; // Queen y position
int obstPosx[] = { 3 }; // x position of obstacles
int obstPosy[] = { 5 }; // y position of obstacles
cout << numberofPosition(n, k, Qposx, Qposy,
obstPosx, obstPosy);
return 0;
}


JAVA

// Java program to find number of cells a
// queen can move with obstacles on the
// chessborad
import java.io.*;
class GFG {
// Return the number of position a Queen
// can move.
static int numberofPosition( int n, int k, int x,
int y, int obstPosx[], int obstPosy[])
{
// d11, d12, d21, d22 are for diagonal distances.
// r1, r2 are for vertical distance.
// c1, c2 are for horizontal distance.
int d11, d12, d21, d22, r1, r2, c1, c2;
// Initialise the distance to end of the board.
d11 = Math.min( x- 1 , y- 1 );
d12 = Math.min( n-x, n-y );
d21 = Math.min( n-x, y- 1 );
d22 = Math.min( x- 1 , n-y );
r1 = y- 1 ;
r2 = n-y;
c1 = x- 1 ;
c2 = n-x;
// For each obstacle find the minimum distance.
// If obstacle is present in any direction,
// distance will be updated.
for ( int i = 0 ; i < k; i++)
{
if ( x > obstPosx[i] && y > obstPosy[i] &&
x-obstPosx[i] == y-obstPosy[i] )
d11 = Math.min(d11, x-obstPosx[i]- 1 );
if ( obstPosx[i] > x && obstPosy[i] > y &&
obstPosx[i]-x == obstPosy[i]-y )
d12 = Math.min( d12, obstPosx[i]-x- 1 );
if ( obstPosx[i] > x && y > obstPosy[i] &&
obstPosx[i]-x == y-obstPosy[i] )
d21 = Math.min(d21, obstPosx[i]-x- 1 );
if ( x > obstPosx[i] && obstPosy[i] > y &&
x-obstPosx[i] == obstPosy[i]-y )
d22 = Math.min(d22, x-obstPosx[i]- 1 );
if ( x == obstPosx[i] && obstPosy[i] < y )
r1 = Math.min(r1, y-obstPosy[i]- 1 );
if ( x == obstPosx[i] && obstPosy[i] > y )
r2 = Math.min(r2, obstPosy[i]-y- 1 );
if ( y == obstPosy[i] && obstPosx[i] < x )
c1 = Math.min(c1, x-obstPosx[i]- 1 );
if ( y == obstPosy[i] && obstPosx[i] > x )
c2 = Math.min(c2, obstPosx[i]-x- 1 );
}
return d11 + d12 + d21 + d22 + r1 + r2 + c1 + c2;
}
// Driver code
public static void main (String[] args) {
int n = 8 ; // Chessboard size
int k = 1 ; // number of obstacles
int Qposx = 4 ; // Queen x position
int Qposy = 4 ; // Queen y position
int obstPosx[] = { 3 }; // x position of obstacles
int obstPosy[] = { 5 }; // y position of obstacles
System.out.println(numberofPosition(n, k, Qposx,
Qposy, obstPosx, obstPosy));
}
}
// This code is contributed by anuj_67.


Python3

# Python program to find number of cells a
# queen can move with obstacles on the
# chessborad
# Return the number of position a Queen
# can move.
def numberofPosition(n, k, x, y, obstPosx, obstPosy):
# d11, d12, d21, d22 are for diagonal distances.
# r1, r2 are for vertical distance.
# c1, c2 are for horizontal distance.
# Initialise the distance to end of the board.
d11 = min (x - 1 , y - 1 );
d12 = min (n - x, n - y);
d21 = min (n - x, y - 1 );
d22 = min (x - 1 , n - y);
r1 = y - 1 ;
r2 = n - y;
c1 = x - 1 ;
c2 = n - x;
# For each obstacle find the minimum distance.
# If obstacle is present in any direction,
# distance will be updated.
for i in range (k):
if (x > obstPosx[i] and y > obstPosy[i] and x - obstPosx[i] = = y - obstPosy[i]):
d11 = min (d11, x - obstPosx[i] - 1 );
if (obstPosx[i] > x and obstPosy[i] > y and obstPosx[i] - x = = obstPosy[i] - y):
d12 = min (d12, obstPosx[i] - x - 1 );
if (obstPosx[i] > x and y > obstPosy[i] and obstPosx[i] - x = = y - obstPosy[i]):
d21 = min (d21, obstPosx[i] - x - 1 );
if (x > obstPosx[i] and obstPosy[i] > y and x - obstPosx[i] = = obstPosy[i] - y):
d22 = min (d22, x - obstPosx[i] - 1 );
if (x = = obstPosx[i] and obstPosy[i] < y):
r1 = min (r1, y - obstPosy[i] - 1 );
if (x = = obstPosx[i] and obstPosy[i] > y):
r2 = min (r2, obstPosy[i] - y - 1 );
if (y = = obstPosy[i] and obstPosx[i] < x):
c1 = min (c1, x - obstPosx[i] - 1 );
if (y = = obstPosy[i] and obstPosx[i] > x):
c2 = min (c2, obstPosx[i] - x - 1 );
return d11 + d12 + d21 + d22 + r1 + r2 + c1 + c2;
# Driver code
if __name__ = = '__main__' :
n = 8 ; # Chessboard size
k = 1 ; # number of obstacles
Qposx = 4 ; # Queen x position
Qposy = 4 ; # Queen y position
obstPosx = [ 3 ] ; # x position of obstacles
obstPosy = [ 5 ]; # y position of obstacles
print (numberofPosition(n, k, Qposx, Qposy, obstPosx, obstPosy));
# This code is contributed by Rajput-Ji


C#

// C# program to find number of cells a
// queen can move with obstacles on the
// chessborad
using System;
class GFG {
// Return the number of position a Queen
// can move.
static int numberofPosition( int n, int k, int x,
int y, int []obstPosx, int []obstPosy)
{
// d11, d12, d21, d22 are for diagonal distances.
// r1, r2 are for vertical distance.
// c1, c2 are for horizontal distance.
int d11, d12, d21, d22, r1, r2, c1, c2;
// Initialise the distance to end of the board.
d11 = Math.Min( x- 1 , y- 1 );
d12 = Math.Min( n-x, n-y );
d21 = Math.Min( n-x, y- 1 );
d22 = Math.Min( x- 1 , n-y );
r1 = y- 1 ;
r2 = n-y;
c1 = x- 1 ;
c2 = n-x;
// For each obstacle find the Minimum distance.
// If obstacle is present in any direction,
// distance will be updated.
for ( int i = 0 ; i < k; i++)
{
if ( x > obstPosx[i] && y > obstPosy[i] &&
x-obstPosx[i] == y-obstPosy[i] )
d11 = Math.Min(d11, x-obstPosx[i]- 1 );
if ( obstPosx[i] > x && obstPosy[i] > y &&
obstPosx[i]-x == obstPosy[i]-y )
d12 = Math.Min( d12, obstPosx[i]-x- 1 );
if ( obstPosx[i] > x && y > obstPosy[i] &&
obstPosx[i]-x == y-obstPosy[i] )
d21 = Math.Min(d21, obstPosx[i]-x- 1 );
if ( x > obstPosx[i] && obstPosy[i] > y &&
x-obstPosx[i] == obstPosy[i]-y)
d22 = Math.Min(d22, x-obstPosx[i]- 1 );
if ( x == obstPosx[i] && obstPosy[i] < y )
r1 = Math.Min(r1, y-obstPosy[i]- 1 );
if ( x == obstPosx[i] && obstPosy[i] > y )
r2 = Math.Min(r2, obstPosy[i]-y- 1 );
if ( y == obstPosy[i] && obstPosx[i] < x )
c1 = Math.Min(c1, x-obstPosx[i]- 1 );
if ( y == obstPosy[i] && obstPosx[i] > x )
c2 = Math.Min(c2, obstPosx[i]-x- 1 );
}
return d11 + d12 + d21 + d22 + r1 + r2 + c1 + c2;
}
// Driver code
public static void Main ()
{
int n = 8 ; // Chessboard size
int k = 1 ; // number of obstacles
int Qposx = 4 ; // Queen x position
int Qposy = 4 ; // Queen y position
int []obstPosx = { 3 }; // x position of obstacles
int []obstPosy = { 5 }; // y position of obstacles
Console.WriteLine(numberofPosition(n, k, Qposx,
Qposy, obstPosx, obstPosy));
}
}
// This code is contributed by anuj_67.


PHP

<?php
//PHP program to find number of cells a queen can move
// with obstacles on the chessborad
// Return the number of position a Queen can move.
function numberofPosition( $n , $k , $x , $y ,
$obstPosx , $obstPosy )
{
// d11, d12, d21, d22 are for diagonal distances.
// r1, r2 are for vertical distance.
// c1, c2 are for horizontal distance.
$d11 ;
$d12 ;
$d21 ;
$d22 ;
$r1 ;
$r2 ;
$c1 ;
$c2 ;
// Initialise the distance to end of the board.
$d11 = min( $x -1, $y -1 );
$d12 = min( $n - $x , $n - $y );
$d21 = min( $n - $x , $y -1 );
$d22 = min( $x -1, $n - $y );
$r1 = $y -1;
$r2 = $n - $y ;
$c1 = $x -1;
$c2 = $n - $x ;
// For each obstacle find the minimum distance.
// If obstacle is present in any direction,
// distance will be updated.
for ( $i = 0; $i < $k ; $i ++)
{
if ( $x > $obstPosx [ $i ] && $y > $obstPosy [ $i ] &&
$x - $obstPosx [ $i ] == $y - $obstPosy [ $i ] )
$d11 = min( $d11 , $x - $obstPosx [ $i ]-1);
if ( $obstPosx [ $i ] > $x && $obstPosy [ $i ] > $y &&
$obstPosx [ $i ]- $x == $obstPosy [ $i ]- $y )
$d12 = min( $d12 , $obstPosx [ $i ]- $x -1);
if ( $obstPosx [ $i ] > $x && $y > $obstPosy [ $i ] &&
$obstPosx [ $i ]- $x == $y - $obstPosy [ $i ] )
$d21 = min( $d21 , $obstPosx [ $i ]- $x -1);
if ( $x > $obstPosx [ $i ] && $obstPosy [ $i ] > $y &&
$x - $obstPosx [ $i ] == $obstPosy [ $i ]- $y )
$d22 = min( $d22 , $x - $obstPosx [ $i ]-1);
if ( $x == $obstPosx [ $i ] && $obstPosy [ $i ] < $y )
$r1 = min( $r1 , $y - $obstPosy [ $i ]-1);
if ( $x == $obstPosx [ $i ] && $obstPosy [ $i ] > $y )
$r2 = min( $r2 , $obstPosy [ $i ]- $y -1);
if ( $y == $obstPosy [ $i ] && $obstPosx [ $i ] < $x )
$c1 = min( $c1 , $x - $obstPosx [ $i ]-1);
if ( $y == $obstPosy [ $i ] && $obstPosx [ $i ] > $x )
$c2 = min( $c2 , $obstPosx [ $i ]- $x -1);
}
return $d11 + $d12 + $d21 + $d22 + $r1 + $r2 + $c1 + $c2 ;
}
// Driver code
$n = 8; // Chessboard size
$k = 1; // number of obstacles
$Qposx = 4; // Queen x position
$Qposy = 4; // Queen y position
$obstPosx = array (3 ); // x position of obstacles
$obstPosy = array (5 ); // y position of obstacles
echo numberofPosition( $n , $k , $Qposx , $Qposy ,
$obstPosx , $obstPosy );
// This code is contributed by ajit.
?>


Javascript

<script>
// Javascript program to find number of cells a queen
// can move with obstacles on the chessborad
// Return the number of position a Queen can move.
function numberofPosition( n, k, x, y,
obstPosx, obstPosy)
{
// d11, d12, d21, d22 are for diagonal distances.
// r1, r2 are for vertical distance.
// c1, c2 are for horizontal distance.
let d11, d12, d21, d22, r1, r2, c1, c2;
// Initialise the distance to end of the board.
d11 = Math.min( x-1, y-1 );
d12 = Math.min( n-x, n-y );
d21 = Math.min( n-x, y-1 );
d22 = Math.min( x-1, n-y );
r1 = y-1;
r2 = n-y;
c1 = x-1;
c2 = n-x;
// For each obstacle find the minimum distance.
// If obstacle is present in any direction,
// distance will be updated.
for (let i = 0; i < k; i++)
{
if ( x > obstPosx[i] && y > obstPosy[i] &&
x-obstPosx[i] == y-obstPosy[i] )
d11 = Math.min(d11, x-obstPosx[i]-1);
if ( obstPosx[i] > x && obstPosy[i] > y &&
obstPosx[i]-x == obstPosy[i]-y )
d12 = Math.min( d12, obstPosx[i]-x-1);
if ( obstPosx[i] > x && y > obstPosy[i] &&
obstPosx[i]-x == y-obstPosy[i] )
d21 = Math.min(d21, obstPosx[i]-x-1);
if ( x > obstPosx[i] && obstPosy[i] > y &&
x-obstPosx[i] == obstPosy[i]-y )
d22 = Math.min(d22, x-obstPosx[i]-1);
if ( x == obstPosx[i] && obstPosy[i] < y )
r1 = min(r1, y-obstPosy[i]-1);
if ( x == obstPosx[i] && obstPosy[i] > y )
r2 = Math.min(r2, obstPosy[i]-y-1);
if ( y == obstPosy[i] && obstPosx[i] < x )
c1 = Math.min(c1, x-obstPosx[i]-1);
if ( y == obstPosy[i] && obstPosx[i] > x )
c2 = Math.min(c2, obstPosx[i]-x-1);
}
return d11 + d12 + d21 + d22 + r1 + r2 + c1 + c2;
}
// Driver Code
let n = 8; // Chessboard size
let k = 1; // number of obstacles
let Qposx = 4; // Queen x position
let Qposy = 4; // Queen y position
let obstPosx = [ 3 ]; // x position of obstacles
let obstPosy = [ 5 ]; // y position of obstacles
document.write(numberofPosition(n, k, Qposx, Qposy,
obstPosx, obstPosy));
</script>


本文由 阿努伊·乔汉 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享