25.11.2006, 13:49
общий
это ответ
Здравствуйте, Гусев Денис!
Это вопрос скорее по алгоритму, а не по языку. Для большей теоретической подготовки рекомендую найти материалы по поиску в ширину (aka волновой алгоритм aka "заливка")
Приложение:
{$APPTYPE CONSOLE}uses SysUtils;const//Начальные координаты x0=1; y0=1;//Конечные координаты x=8; y=8;//Размер доски N=8;type TMove=record dx,dy:integer;end;//Возможные ходыconst MoveNum=8; Moves:array [1..MoveNum] of TMove= ((dx:2;dy:1),(dx:1;dy:2),(dx:-1;dy:2),(dx:-2;dy:1), (dx:-2;dy:-1),(dx:-1;dy:-2),(dx:1;dy:2),(dx:2;dy:-1));var Board:array [1..N,1..N] of integer; Step:integer; x1,y1,xn,yn:integer; i:integer;begin //Инициализация Step:=1; Board[x0][y0]:=Step; //Обход доски while Board[x][y]=0 do begin inc(Step); for y1:=1 to N do for x1:=1 to N do if Board[x1][y1]=Step-1 then for i:=1 to MoveNum do begin xn:=x1+Moves[i].dx; yn:=y1+Moves[i].dy; if (1<=xn) and (xn<=N) and (1<=yn) and (yn<=N) and (Board[xn][yn]=0) then Board[xn][yn]:=Step; end; end; //Результат WriteLn(Board[x][y]-1);end.