![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Народ как реализовать программу которая показала-бы
вариант обхода конём шахматной доски????????????????????????????????????????? |
|
#2
|
||||
|
||||
|
Ну я вижу это так:
1. Создаем массив описывающий щахматную доску: Код:
Var Desk: Array[0..7,0..7] of Integer; Заполняем массив Desk нулями. 2. Создаем массив из 8 элементов описывающих возможные ходы относительно текущей позиции на шахматной доске: Код:
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)); Это конечно очень куцее описание, но я думаю немножко поможет. |
|
#3
|
||||
|
||||
пасиба!!!! дальше буду думать! |
|
#4
|
||||
|
||||
|
Собственно вот рабочий вариант, но он заполняет не всю доску:
Код:
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; |
|
#5
|
||||
|
||||
|
Здесь я для наглядности в StringGrid рисую.
|
|
#6
|
||||
|
||||
|
У меня компилятор ругается(благим матом=)) на метод "Cells"!!! чё делать
|
|
#7
|
||||
|
||||
|
Я для наглядности создал на форме Desk:TStringGrid размером 8 на 8
Но как я сказал, это линейный вариант, а вам придется использовать ветвление и искать оптимальный путь для заполнения доски. Т.е. просчитать первый маршрут. Если он оказался сразу оптимален до полного заполнения, то финиш, а иначе дойти до тупика, затем вернуться на шаг назад, проверить новый маршрут и т.д. Таким макаром до точки старта. Так-что самое интересное у вас еще впереди. ![]() Последний раз редактировалось Страдалецъ, 24.11.2009 в 12:45. |
|
#8
|
||||
|
||||
|
ААААААААААААА теперь понятно!!!!
![]() |