Показать сообщение отдельно
  #4  
Старый 22.11.2009, 16:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Собственно вот рабочий вариант, но он заполняет не всю доску:
Код:
Const
  MoveDir: Array[1..8] of TPoint = ((X:2;Y:1),(X:1;Y:2),(X:-1;Y:2),(X:-2;Y:1),(X:-2;Y:-1),(X:-1;Y:-2),(X:1;Y:-2),(X:2;Y:-1));
Var
  Row,Col,Move: Integer;
  i: Integer;
begin
 Move := 0;
 Row := 0; Col := 0;
 while True
 do begin
    Inc(Move);
    for i := 1 to 8
    do begin
       if (Col + MoveDir[i].X in [0..7]) and (Row + MoveDir[i].Y in [0..7])
       then if Desk.Cells[Col + MoveDir[i].X, Row + MoveDir[i].Y] = ''
            then begin
                 Inc(Col, MoveDir[i].X);
                 Inc(Row, MoveDir[i].Y);
                 Break;
                 end;
       end;
    if Desk.Cells[Col, Row] <> ''
    then Exit;
    Desk.Cells[Col, Row] := IntToStr(Move)
    end;
end;
Для заполнения всей доски вам придется искать наиболее оптимальный путь.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием