Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как решать такие задачи? / 25 сообщений из 28, страница 1 из 2
12.02.2016, 14:12
    #39169577
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
Положим есть доска NxN клеток. Есть 2 фишки, ф1 и ф2, которые изначально находятся в произвольных клетках. . За один ход обе фишки могут переместиться на одну клетку в одном направлении. Между клетками могут быть заборы, при встрече с которым фишка остается на месте, если ход в сторону клетки перегороженной забором. Если упрется в борт, так же остается на месте.
Есть две лунки, л1 и л2, которые тоже находятся в произвольных клетках. Нужно загнать соответствующую фишку в соответствующую лунку.
...
Рейтинг: 0 / 0
12.02.2016, 14:51
    #39169613
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
Тривиально до жути. Сперва гонишь одну фишку, не обращая внимания на вторую. Загнав её в лунку, гонишь вторую.
...
Рейтинг: 0 / 0
12.02.2016, 15:37
    #39169658
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВ,

"Волной" ищи пути и гони себе хоть 10 фишек.
...
Рейтинг: 0 / 0
12.02.2016, 17:48
    #39169797
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
DarkMasterЕвгенийВ,

"Волной" ищи пути и гони себе хоть 10 фишек.
Какой волной? Как искать? Хоть название алгоритма?

Akina Тривиально до жути. Сперва гонишь одну фишку, не обращая внимания на вторую. Загнав её в лунку, гонишь вторую.
Надо что бы вторая не попала в лунку для первой.
Вообще их может быть 100500.
...
Рейтинг: 0 / 0
12.02.2016, 18:35
    #39169845
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВ,

Начни отсюда - https://ru.wikipedia.org/wiki/Поиск_пути
...
Рейтинг: 0 / 0
12.02.2016, 19:08
    #39169882
alexy_black
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
локальные минимумы будут?
какой должен быть ход, рандомный или надо именно путь найти?
...
Рейтинг: 0 / 0
12.02.2016, 19:36
    #39169898
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВКак решать такие задачи?
Очень полезно чтение Вирта. "Структуры данных + алгоритмы = программы".
То есть, в начале выбирается представление данных - доски и позиции фишек на ней, обозначение стен, обозначние конечных клеток и т.н. Записи, массивы из записей и др.
Потом алгоритмы. Процедура "Один ход" - в котором задается направление движения, и в процедуре делаются соответствующие изменения данных. Процедура "Движение к цели", которая использует процедуру "Один Ход".
И т.д
...
Рейтинг: 0 / 0
12.02.2016, 20:23
    #39169911
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВКакой волной? Как искать? Хоть название алгоритма?
Линейное программирование, теория графов, поиск кратчайшего пути.
При поиске пути чужую лунку ты можешь временно обнести стенами.
Проблемой может быть если фишки взаимно блокируют единственный путь. Что делать тогда - я не знаю.
...
Рейтинг: 0 / 0
12.02.2016, 20:33
    #39169916
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
AkinaСперва гонишь одну фишку, не обращая внимания на вторую. Загнав её в лунку, гонишь вторую

может не получиться - могут мешать друг-другу. можно в этом случае отодвинуть попробовать, но для N фишек это будет сложно
...
Рейтинг: 0 / 0
12.02.2016, 20:36
    #39169918
Иммануил Кант
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
Иммануил Кантотодвинуть попробовать

рекурсивно
...
Рейтинг: 0 / 0
13.02.2016, 12:53
    #39170265
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
Но вообще-то в задаче не указано, что фишки не могут одновременно быть в одной клетке ;)

Условие не очень, конечно... "Между клетками могут быть заборы, при встрече с которым фишка остается на месте, если ход в сторону клетки перегороженной забором. " Не может ходить через забор, и все. Какой же это алгоритм, который задаст направление через забор, чтобы фишка не могла перейти и пропустила ход?
...
Рейтинг: 0 / 0
15.02.2016, 11:19
    #39171090
yugl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
S.G.Условие не очень, конечно... "Между клетками могут быть заборы, при встрече с которым фишка остается на месте, если ход в сторону клетки перегороженной забором. " Не может ходить через забор, и все. Какой же это алгоритм, который задаст направление через забор, чтобы фишка не могла перейти и пропустила ход?
Вообще-то условие нормальное, если расстановка стен заранее неизвестна.
ТС, к сожалению, экономит на словах, а хорошо бы всё же уточнить такого рода вещи. Скажем, то, что фишки изначально находятся в произвольных клетках, означает, что координаты этих клеток задаются при старте, или мы знаем только то, что фишки находятся на доске?
...
Рейтинг: 0 / 0
15.02.2016, 18:01
    #39171648
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
yuglS.G.Условие не очень, конечно... "Между клетками могут быть заборы, при встрече с которым фишка остается на месте, если ход в сторону клетки перегороженной забором. " Не может ходить через забор, и все. Какой же это алгоритм, который задаст направление через забор, чтобы фишка не могла перейти и пропустила ход?
Вообще-то условие нормальное, если расстановка стен заранее неизвестна.
ТС, к сожалению, экономит на словах, а хорошо бы всё же уточнить такого рода вещи. Скажем, то, что фишки изначально находятся в произвольных клетках, означает, что координаты этих клеток задаются при старте, или мы знаем только то, что фишки находятся на доске?
Координаты задаются на старте.
...
Рейтинг: 0 / 0
15.02.2016, 20:16
    #39171786
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
S.G.в задаче не указано, что фишки не могут одновременно быть в одной клетке
То же касается и лунок.
...
Рейтинг: 0 / 0
16.02.2016, 08:47
    #39171954
yugl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВКоординаты задаются на старте.
Если все координаты задаются при старте, то задача становится тривиальной.
Формируешь из начального положения фишек множество возможных положений после нулевого хода - ФФ(0).
Затем из него формируешь множество возможных положений после первого хода ФФ(1). И т.д. Очевидно, что множество ФФ(n) входит в ФФ(n+1).
Процесс продолжаешь до тех пор, пока не выполнится одно из двух условий:
1) фишки попали в лунки (клетки лунок попали нужным образом в множество положений после некоторого хода)
2) множество положений не увеличилось после очередного хода
...
Рейтинг: 0 / 0
16.02.2016, 10:56
    #39172053
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
yugl,
Все осложняется тем, что фишек >=2. Сначала можем загнать одну, потом другую.
...
Рейтинг: 0 / 0
16.02.2016, 11:16
    #39172073
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВ , неверно. Состояние, когда загнана одна (или несколько, но не все) - это некое промежуточное ФФ(n).
...
Рейтинг: 0 / 0
16.02.2016, 12:18
    #39172141
Доктар123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
Иммануил КантИммануил Кантотодвинуть попробовать

рекурсивно

+ сортировкой, на каждой итерации,
верхний элемент списка
определяет параметры следующего рекурсивного вызова.

алгоритм сортировки определяет расстояние
до препядствий и лунки.
Сортировка должа выбирать ход таким образом
что бы путь находился дальше от препядствия и ближе к лунке из
других возможных вариантов ходов.
...
Рейтинг: 0 / 0
16.02.2016, 15:01
    #39172342
yugl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВyugl,
Все осложняется тем, что фишек >=2. Сначала можем загнать одну, потом другую.
Алгоритм практически универсален, от числа фишек не зависит, собственно, необходимо только определить правила получения новых возможных положений из текущего.
Единственный (но серьезный) недостаток алгоритма - быстрый рост числа возможных положений при росте числа фишек.

Альтернатива - построить какое-нибудь топологическое описание доски. Самое простое - хранить для каждой пары клеток (старт, финиш) направление, по которому надо идти фишке (или признак, что финиш недоступен). Такую штуку тоже очень просто сделать. Но тут уже необходимо допущение, что фишки (лунки) не мешают движению других фишек, поскольку топоописание будет статичным.
...
Рейтинг: 0 / 0
16.02.2016, 15:25
    #39172369
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
yuglЕдинственный (но серьезный) недостаток алгоритма - быстрый рост числа возможных положений при росте числа фишек.

Почему? Они всегда двигаются синхронно.
...
Рейтинг: 0 / 0
16.02.2016, 15:53
    #39172400
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВПочему? Они всегда двигаются синхронно.Да потому что каждому состоянию на ход N соответствует 4 состояния на ход N+1. Кроме случая, когда ни одна из фишек не сдвинется при попытке движения в некоем направлении. А 4 в степени N, знаете ли, растёт весьма угрожающими темпами...
...
Рейтинг: 0 / 0
16.02.2016, 20:00
    #39172599
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
Я тут не дочитал, видимо:ЕвгенийВ За один ход обе фишки могут переместиться на одну клетку в одном направлении. Что это означает, прямо как и написано, что все (обе) фишки, движутся либо направо, либо вверх и т.д, синхронно?
...
Рейтинг: 0 / 0
17.02.2016, 11:56
    #39173009
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
AkinaДа потому что каждому состоянию на ход N соответствует 4 состояния на ход N+1. Кроме случая, когда ни одна из фишек не сдвинется при попытке движения в некоем направлении. А 4 в степени N, знаете ли, растёт весьма угрожающими темпами...
Но это лучше, чем если бы они могли двигаться разно направленно.

S.G.Что это означает, прямо как и написано, что все (обе) фишки, движутся либо направо, либо вверх и т.д, синхронно?
Да.
...
Рейтинг: 0 / 0
17.02.2016, 17:38
    #39173430
Areostar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
ЕвгенийВ,

Если совсем тапорно, то можно перебором ходов

или вам надо к примеру за минимальное число ходов??
...
Рейтинг: 0 / 0
18.02.2016, 11:24
    #39173909
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как решать такие задачи?
Areostar,
По идее надо уменьшить расходы по памяти, сложности алгоритма, ну и ходов как можно меньше делать...
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Как решать такие задачи? / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]