[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача о ферзях
Forever
Помогите пожалуйста , нужно написать функцию, которая принимает произвольное количество массивов вида [1,2], [5,3] и тд, в которых первое значение - x, второе - y.
Дана так же шахматная доска 8 на 8, и таким образом каждый массив обозначает ферзя на доске.
Функция должна возвращать false в случае, если хоть один ферзь мешает другому, и true - если никто никому не мешает.
Kusss
ходы по кресту [[1-8], y], [x,[1-8]]
ходы по иксу [x+1, y+1], [x-1,y-1], [x+1, y-1], [x-1,y+1]
и ищешь схождение массивов.
brevis
>PHP общие вопросы
:)

function canPlace($queens) {
$board = [];
for ($i = 0; $i < count($queens); $i++) {
$x = $queens[$i][0];
$y = $queens[$i][1];
if (isset($board[$y.'x'.$x])) return false;
for ($j = 0; $j < 8; $j++) {
$board[$y.'x'.$j] = 1;
$board[$j.'x'.$x] = 1;
if ($y - $j >= 0) {
if ($x - $j >= 0) $board[($y - $j).'x'.($x - $j)] = 1;
if ($x + $j < 8) $board[($y - $j).'x'.($x + $j)] = 1;
}
if ($y + $j < 8) {
if ($x + $j < 8) $board[($y + $j).'x'.($x + $j)] = 1;
if ($x - $j >= 0) $board[($y + $j).'x'.($x - $j)] = 1;
}
}
}

return true;
}

/*
. . . . . Q . .
Q . . . . . . .
. . . . Q . . .
. Q . . . . . .
. . . . . . . Q
. . Q . . . . .
. . . . . . Q .
. . . Q . . . .
*/

var_dump(canPlace([[0,1], [1,3], [2,5], [3,7], [4,2], [5,0], [6,6], [7,4]]));

/*
. . . . . Q . .
Q . . . . . . .
. . . . Q . . .
. Q . . . . . .
. . . . . . Q .
. . Q . . . . .
. . . . . . . .
. . . Q . . . .
*/

var_dump(canPlace([[0,1], [1,3], [2,5], [3,7], [4,2], [5,0], [6,4]]));


_____________
Чатик в телеге
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.