Обучение
October 22, 2022

Задача о восьми ферзях - иллюстрация

Есть замечательная задача о расстановке на шахматной доске восьми ферзей, которые не бьют друг друга. Решается она рекурсией. Но для объяснения задачи её надо проиллюстрировать. Как?

Ниже приводится программа на PascalABC.NET, используемая для этой цели в реальных занятиях.

uses GraphWPF,WPFObjects;

procedure DrawChessBoard(w: real);
begin
  for var i:=0 to 7 do
  for var j:=0 to 7 do
    if (i+j).IsOdd then
      FillRectangle(i*w,j*w,w,w,Colors.Gray);
end;

begin
  var w := 300/4;
  DrawChessBoard(w);
  var Curr: ObjectWPF;
  
  for var i:=0 to 7 do
    new PictureWPF(650,i*w,70,70,'Queen0.png');
  
  OnMouseDown := (x,y,mb) -> begin
    Curr := ObjectUnderPoint(x,y);
  end;
  OnMouseUp := (x,y,mb) -> begin
    Curr := nil;
  end;
  OnMouseMove := (x,y,mb) -> begin
    if (mb=1) and (Curr<>nil) then
      Curr.Center := Pnt(x,y);
  end;
end.

Так выглядит окно после расстановки нескольких ферзей:

Вот файл Queen0.png:

Обратим внимание на то, что в даной программе свободно сочетается использование модулей GraphWPF и WPFObjects. GraphWPF при этом рисует на самом дальнем слое, а объекты WPFObjects располагаются поверх него.

Заключение. Графические модули в PascalABC.NET направлены на быструю и понятную визуализацию и помощь в иллюстрации алгоритмов. Они также позволяют использовать события мыши и клавиатуры, делающие такую визуализацию интерактивной.

А давайте в комментариях напишем решение самой задачи о восьми ферзях?