петя Гость
|
Добавлено: Вс Июн 13 2004 14:52 Заголовок сообщения: помогите разобраться с рекурсией |
|
|
всем привет
помогите пожалуйста
есть двумерный массив 10 на 10 с числами от 1 до 4 (целые)
и начальная точка, неободимо определить какое максимально возможное количество ходов можно сделать,
перемещаться можно только по горизонтали и вертикали на количество клеток, кот указано в ячейке. пересекать уже пройденные ячейки нельзя.
1 3 4 3 2 3,3 начальная точка я могу походить на 1 вверх,
2 3 1 2 3 на 2 ячейки влево и т.д.
1 2 0 1 2
3 2 1 2 2
1 1 2 2 1
после того как я прошел на 2 ячейки влево массив примет вид
1 3 4 3 2
2 3 1 2 3
0 0 0 1 2
3 2 1 2 2
1 1 2 2 1
не могу разобраться куда мне вставить процедуру FillNum(it, jt, kol, -1, 0); т.к. у меня почемуто не все возможные варианты находит
FillZero(it, jt, kol, -1, 0) заполняет нулями kol ячеек в заданном направлении (-1, 0-это направление )
FillNum(it, jt, kol, -1, 0) наоборот заполняет начальными значениями kol ячеек в заданном направлении
procedure Wave(it,jt,napr,score:integer; st:string;
var kol:integer;
x1,y1:integer;
//k:integer;
begin
kol:=NumInt[it-1,jt];
if (kol<>0) and (it - kol >0) then
begin
if FillZero(it, jt, kol, -1, 0)=true then
wave(it-kol, jt, 8, score+kol, st);
FillNum(it, jt, kol, -1, 0);
end;
kol:=NumInt[it,jt+1];
if (kol<>0) and (jt + kol <=10) then
begin
if FillZero(it, jt, kol, 0, 1)=true then
wave(it,jt+kol, 6,score+kol,st);
FillNum(it, jt, kol, 0, 1);
end;
kol:=NumInt[it+1,jt];
if (kol<>0) and (it + kol<=10)then
begin
if FillZero(it, jt, kol, 1, 0)=true then
wave(it+kol, jt, 4, score+kol, st);
FillNum(it, jt, kol, 1, 0);
end;
kol:=NumInt[it,jt-1];
if (kol<>0) and (jt - kol>0)then
begin
if FillZero(it, jt, kol, 0, -1)=true then
wave(it, jt-kol, 2, score+kol, st);
FillNum(it, jt, kol, 0, -1);
end;
end;
может кто делал чего подобное или знает где можно найти |
|