Задача о восьми ферзях - иллюстрация
Есть замечательная задача о расстановке на шахматной доске восьми ферзей, которые не бьют друг друга. Решается она рекурсией. Но для объяснения задачи её надо проиллюстрировать. Как?
Ниже приводится программа на 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.Так выглядит окно после расстановки нескольких ферзей:
Обратим внимание на то, что в даной программе свободно сочетается использование модулей GraphWPF и WPFObjects. GraphWPF при этом рисует на самом дальнем слое, а объекты WPFObjects располагаются поверх него.
Заключение. Графические модули в PascalABC.NET направлены на быструю и понятную визуализацию и помощь в иллюстрации алгоритмов. Они также позволяют использовать события мыши и клавиатуры, делающие такую визуализацию интерактивной.
А давайте в комментариях напишем решение самой задачи о восьми ферзях?