Прога частично напоминает морской бой. Задается поле, на нем можно расставлять острова (один квадрат –ик один остров). После расставления островов, прога должна сосчитать их кол-во.
Проссмотрел выше указанный код, начиная с {реализации алготма} подставил в свою программу. Теперь при выделении парных(т.е. из 2-ух клеток) и не парнх островов, в кол-ве пишется 0, а когда убираю минус перед единицейне(см. ниже) то прога считает по принципу одна клетка один остров. Внимание вопрос. Из-за чего так получается?
...... {Реализация алгоритма} n:=0; for y:=1 to my do for x:=1 to mx do
if Z[x,y]=-1 then begin {Вот тут убираю минус}
Inc(n); Z[x,y]:=n; repeat Flag:=false; for j:=1 to my do for i:=1 to mx do if (Z[i,j]=-1)and((i>1)and(Z[i-1,j]=n)or(i<mx)and(Z[i+1,j]=n)or(j>1)and(Z[i,j-1]=n)or(j<my)and(Z[i,j+1]=n)) then begin Z[i,j]:=n; Flag:=true end until not Flag end; WriteLn('Total islands: ',n); ...... ReadLn
Насколько я смог понять, в твоей программе острова обозначены единицами. В моем алгоритме они обозначены -1 (минус единицами). Мне кажется, это вполне может вызвать такое поведение. Выходов, как всегда, два: 1. Переделать мой код (не оченб красиво будет, но можно) 2. Поменять обозначение острова у тебя на -1. Думай..
PS Вообще, в твоей программе трудно разбираться.. Форматирование ты презираешь как класс? Даже мой кусок выровнял в линеечку - я еле узнал его..
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой