Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 22.11.2009, 14:02
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию обход шахматной доски

Народ как реализовать программу которая показала-бы
вариант обхода конём шахматной доски?????????????????????????????????????????
Ответить с цитированием
  #2  
Старый 22.11.2009, 15:18
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну я вижу это так:
1. Создаем массив описывающий щахматную доску:
Код:
Var
   Desk: Array[0..7,0..7] of Integer;
Выбираем тип 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));
Далее в бесконечном цикле начинаем проверять, является ли значение ячейки при ходе коня 0.
Это конечно очень куцее описание, но я думаю немножко поможет.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 22.11.2009, 15:57
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

пасиба!!!! дальше буду думать!
Ответить с цитированием
  #4  
Старый 22.11.2009, 16:05
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 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;
Для заполнения всей доски вам придется искать наиболее оптимальный путь.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 22.11.2009, 16:06
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Здесь я для наглядности в StringGrid рисую.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 24.11.2009, 12:28
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

У меня компилятор ругается(благим матом=)) на метод "Cells"!!! чё делать
Ответить с цитированием
  #7  
Старый 24.11.2009, 12:32
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Я для наглядности создал на форме Desk:TStringGrid размером 8 на 8
Но как я сказал, это линейный вариант, а вам придется использовать ветвление и искать оптимальный путь для заполнения доски. Т.е. просчитать первый маршрут. Если он оказался сразу оптимален до полного заполнения, то финиш, а иначе дойти до тупика, затем вернуться на шаг назад, проверить новый маршрут и т.д. Таким макаром до точки старта.
Так-что самое интересное у вас еще впереди.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 24.11.2009 в 12:45.
Ответить с цитированием
  #8  
Старый 24.11.2009, 12:38
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
Смех

ААААААААААААА теперь понятно!!!!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:57.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter