Программа Разбитые доски
Разбиение доски
Сама проблема стоит следующим образом: Дана клетчатая доска прямоугольной формы. Некоторые клетки на ней выколоты. Требуется определить на сколько частей распадется доска.
Суть алгоритма проста: сама доска (массив) заполняется единицами, выколотые клетки нулями. затем начинается просмотр всех клеток подряд. Примерно следующим образом:
for i:=1 to m do for j:=1 to n do
begin
if doska.d[i,j]=1 then begin s:=s+1;
proverka(i,j);end;
end;
Если находится клетка содержание которой равно единице, то запускается процедура proverka(i,j) главная цель которой - выявить кусок доски которому принадлежит клетка, заполнить, его значением s>1 (для каждого куска свое). Все это происходит по рекурсии следующим образом:
procedure traschet.proverka(a,b:byte);
begin
doska.d[a,b]:=s;
if doska.d[a-1,b]=1 then proverka(a-1,b);
if doska.d[a+1,b]=1 then proverka(a+1,b);
if doska.d[a,b-1]=1 then proverka(a,b-1);
if doska.d[a,b+1]=1 then proverka(a,b+1);
end;
Для красоты сделал некоторое подобие интерфейса (чтоб было проще доску на части раскалывать).
Работа программы строится на трех объектах: доски - tdoska, расчета - traschet и курсора - tkyrsor.
Сайт создан в системе uCoz