![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
madrabbit |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 14 Пол: Мужской Репутация: ![]() ![]() ![]() |
Здравствуйте.
Помогите пожалуйста с алгоритмом. хотя бы просто на пальцах или отправьте к соответствующим ссылкам. Интересует следующий алгоритм: Предположим задана некоторая матрица размерности N на N( положим поле больше шахматной доски), а также координаты двух точек(элементы массива a[i,j], b[i1,j1]), Задача. Найти оптимальный путь межды этими точками "шахматным конем". Решал так: забил всю матрицу нулями, два элемента - "1". функция проверки "не является ли элемент массива =1. Если нет, то в функцию передаются новые координаты(причем 8 различных точек, куда может шагнуть конь с текущего места). таким образом это приводит к многократному зацикливанию и росту рекурсивных вложений... посоветуйте принцип решения. каким способом, например, можно оборвать вложенную процедуру при приближении к краям поля. Ну и вообще... задач однотипных я знаю много. Интересует сам принцип и средства решения. Хотелось бы самому дойти, но видно опыта самоучки маловато... спасибо вам заранее за помощь! :molitva: Сообщение отредактировано: madrabbit - |
![]() ![]() |
madrabbit |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 14 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(APAL @ 18.12.04 18:54) но можно... Если на пальцах: 1. Для начальной позиции ищем все возможности хода. 2. Для каждой такой возможности рекурсивно вызываем ту же процедуру поиска возможностей хода. Замечания: ИМХО: место куда надо попасть лучше отметить, например "2" Ставить единицы туда куда походили и не затирая старые единица. Это чтобы наша процедура поиска вариантов хода "не ходила" на одну клетку дважды. Теперь только организовать запись найденных вариантов и произвести поиск никратчашего/-их. спасибо. на самом деле я все так и делал. (описался насчет "двойки") проблема в том, каким конкретно способом обрывать процедуру(каким оператором) суть проблемы: начиная с первой точки(если она не у самого края) проверяется восемь "соседних" точек, допустим не подошли, значение ставим "1", теперь для всех восьми(?!) запускаем процедуру и так далее... правильно я понимаю. куда заносить последовательность ходов,в отдельный массив? для каждой последовательности свой массив определять? для меня проблематично. можно тут немного по-подробнее. стоит ли его передавать в следующую процедуру? или как? короче посоветуйте пожалуйста, мне кажется, я уже близок к решению... ![]() |
![]() ![]() |
![]() |
Текстовая версия | 8.09.2025 3:24 |