34 lines
1.1 KiB
ObjectPascal
34 lines
1.1 KiB
ObjectPascal
// Все решения задачи о расстановке ферзей на шахматной доске
|
||
const N = 8;
|
||
|
||
var board := new integer[N]; // board[row] = столбец ферзя в этой строке
|
||
|
||
procedure Place(row: integer);
|
||
begin
|
||
for var col := 0 to N-1 do
|
||
begin
|
||
// проверяем конфликты со всеми ранее поставленными ферзями
|
||
var conflict := False;
|
||
for var prevRow := 0 to row-1 do
|
||
if (board[prevRow] = col) or // тот же столбец
|
||
(Abs(board[prevRow] - col) = Abs(prevRow - row)) then // та же диагональ
|
||
begin
|
||
conflict := True;
|
||
break;
|
||
end;
|
||
|
||
if not conflict then
|
||
begin
|
||
board[row] := col; // ставим ферзя
|
||
|
||
if row = N-1 then
|
||
board.Println // выводим решение
|
||
else Place(row+1); // продолжаем рекурсию
|
||
end
|
||
end;
|
||
end;
|
||
|
||
begin
|
||
Println('Все решения задачи о 8 ферзях:');
|
||
Place(0);
|
||
end. |