Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2009, 12:43   #1
Alexeytur
Пользователь
 
Аватар для Alexeytur
 
Регистрация: 14.04.2009
Сообщений: 12
По умолчанию Ход ферзём (Delphi)

Такая задача: на пустую шахматную доску в любую клетку ставится ферзь. Затем указывается любая другая клетка. Нужно найти и показать минимальный путь, который должен проделать ферзь из начального положения в эту точку.

Подскажите пожалуйста хотя бы возможные принципы решения.
Alexeytur вне форума Ответить с цитированием
Старый 09.06.2009, 13:02   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм. Допустим так: Есть координаты ферзя Fx,Fy и клетки Ах Ау
Тогда Если
Ax=Fx or Ay=Fy - то путь по прямой
abs(Ax-Fx)=0 AND abs(Ay-Fy) - то путь по диагонали
Иначе скажем abs(Ax-Fx)+abs(Ay-Fy)

Вроде такого было в колледже...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2009, 13:25   #3
danekne
Форумчанин
 
Регистрация: 12.02.2007
Сообщений: 360
По умолчанию

что самое забавное - "Иначе скажем abs(Ax-Fx)+abs(Ay-Fy)
" нафиг не надо... Как я представляю - ферзь на любое поле может попасть либо за 0 (частный случай), либо за 1 - по диагонали либо вертикали\горизонтали либо за 2. То есть это условие не нужно - если не (Ax=Fx or Ay=Fy) and не abs(Ax-Fx)=0 AND abs(Ay-Fy) - значит за два хода минимум
danekne вне форума Ответить с цитированием
Старый 09.06.2009, 13:29   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
danekne
Дружище, автору нужен путь, а стало быть кол-во клеток через которые ферзюка должна прыгнуть, а не кол-во ходов.
Или нет, а, Автор?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2009, 13:46   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я согласен с мнением Stilet: путь — это именно количество клеточек, которые должен "прошагать" Ферзь...

а конкретно по движению:
1) я, например, не допонял: поясните формулу движения по диагонали.
2) имхо, краткий путь не является abs(Ax-Fx)+abs(Ay-Fy) (см. рисунок)
Изображения
Тип файла: jpg chess1.jpg (13.7 Кб, 153 просмотров)

Последний раз редактировалось Serge_Bliznykov; 09.06.2009 в 14:09.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.06.2009, 14:05   #6
Alexeytur
Пользователь
 
Аватар для Alexeytur
 
Регистрация: 14.04.2009
Сообщений: 12
По умолчанию

Нужны и минимальный путь (количество клеток) и число ходов. С количеством ходов я сам смогу разобраться. Вот примерно мои мысли:1)Если нет совпадений по строкам\столбцам и диагоналям, то 2) определить, что ближе к ферзю: строка или столбец точки. 3)Диагональным ходом добраться до строки\столбца точки 4) Добраться до точки прямым ходом.
Alexeytur вне форума Ответить с цитированием
Старый 09.06.2009, 14:11   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Alexeytur, полностью согласен с Вашим алгоритмом!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.06.2009, 15:07   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
имхо, краткий путь не является
Убедил. В таком случае двигаться нужно по диагонали пока не сравняется одна из координат )
Но только тут одна трабла - Шахматные правила не позволят ферзю ходить дважды не пропустив хода противника
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.06.2009, 16:22   #9
Alexeytur
Пользователь
 
Аватар для Alexeytur
 
Регистрация: 14.04.2009
Сообщений: 12
По умолчанию

Спасибо всем за ответы, программа вроде работает!
Alexeytur вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ход конем Etlau Помощь студентам 3 28.05.2010 19:16
Ход ферзём, ищем баги Sasha_Smirnov Общие вопросы C/C++ 0 13.05.2009 03:26
помогите придумать ход решения Petruha-nsk Общие вопросы C/C++ 6 13.04.2009 18:31
За один ход можна вычеркнуть одно число и на его место записать строго меньше неотрицательное число. Witaliy Помощь студентам 5 25.02.2009 17:44
при открытии большого файла должно появляться окно с ProgressBar и показывать ход открытия Михаил Юрьевич Общие вопросы Delphi 3 28.05.2008 23:33