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