
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;
Для заполнения всей доски вам придется искать наиболее оптимальный путь.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
|