|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
ААААААААААААА теперь понятно!!!!
|