IPB
ЛогинПароль:

> Новый Морской бой
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


В общем.. ига такая на логику... Весь инет облазил в поисках инфы, ничего не нашел.. попалась случайно вместе с журнальчиком 777. Суть игры:
Дано поле. По вертикали и горизонтали расположены числа 0..9. Каждое число предполагает наличие в в линии такого количества фрагментов кораблей. Набор кораблей стандартный. В общем прожка по идее должна выдать расстановку кораблей. Ваши соображения по поводу)))) smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Michael_Rybak
*****

Группа: Пользователи
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Я бы попробовал такой перебор.

Рассмотрим пустую строку, для которой сумма, например, равна 2.
Существует С из 10 по 2 = 10*9/2 = 45 способов закрасить строку таким способом.

Вообще, из N клеток закрасить К всегда можно С из N по К способами.

Так вот, выбираем строку/столбец, для которой количество вариантов минимально.
Перебираем все варианты, и для каждого из них делаем выводы, а именно: если, например, в горизонтальной строке встречаются 2 подряд фрагмента, обрамленные пустыми клетками, то это - не что иное, как двухпалубный корабль. Обрамляем его пустыми клетками сверху и снизу. Если же встречается один фрагмент, то это - либо 1-палубный, либо вертикальный, поэтому в любом случае ставим прочерк в соседние по диагонали клетки.

А теперь выбираем следующую строку/столбец, в которой количество вариантов минимально, но уже учитываем поменявшуюся обстановку на поле. Например, если в строке записана сумма 8, но уже известно, что одна (определенная) клетка там - пустая, а другая - фрагмент корабля, то здесь у нас уже не С из 10 по 8, а С из 8 по 7.

Перебирая варианты нужно, конечно, считать встретившиеся корабли, чтобы вовремя сделать откат противоречивого варианта.

Для удобства откатов лучше хранить не матрицу состояний (0 - не знаем, 1 - фрагмент, 2 - пусто), а матрицу целых чисел (0 - не знаем, -1 - фрагмент, K>0 - пусто, причем является результатом К выводов).

Тогда, когда мы в некоторую клетку ставим -1, мы должны просто инкрементировать всех соседей по диагонали, тем самым обозначая, что там - пусто (при этом проверяя отсутствие противоречий), а для отката достаточно будет просто декрементировать обратно, а не запоминать и восстанавливать все 8 соседей.


Должно работать быстро. Если будут проблемы с реализацией - маякни, если будет время, было бы интересно закодить smile.gif

Сообщение отредактировано: Michael_Rybak -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
bLACK_wINGS   Новый Морской бой   9.10.2006 2:16
Bokul   А по форуму поискать? морской бой (растановка кора…   9.10.2006 2:25
bLACK_wINGS   2Bokul: Нее.. это я уже смотрел... там чисто генер…   9.10.2006 2:32
Bokul   Да не то. Это я сначала не правильно задание по…   9.10.2006 2:41
bLACK_wINGS   2Bokul: Да набор такой: 4-однопалубников 3-двухпал…   9.10.2006 2:47
Bokul   Еще одно: Какой размер доски и может ли повторятся…   9.10.2006 3:03
Michael_Rybak   Я бы попробовал такой перебор. Рассмотрим пустую …   9.10.2006 4:46
bLACK_wINGS   2Michael_Rybak Ё-моё.. а не будет ли много мороки …   14.10.2006 2:15
Michael_Rybak   Давай :) EDIT: >Ё-моё.. а не будет ли много мо…   14.10.2006 3:01
bLACK_wINGS   Вот отсканенный типа алгоритм... Но как программу…   28.10.2006 14:42
Michael_Rybak   этот алгоритм вродь как лучше чем перебор Как с…   28.10.2006 17:13
bLACK_wINGS   2Michael_Rybak Да решал я эти головоломки, ну алго…   1.11.2006 0:30
Michael_Rybak   Вот оно как? Ну и замечательно! Что именн…   1.11.2006 0:43
bLACK_wINGS   Вот поразмыслил я над твоим предложением перебором…   2.11.2006 23:34
Michael_Rybak   Глубины более чем достаточно, потому что 1) глуб…   3.11.2006 1:08
bLACK_wINGS   В принципе с твоей функцией понятно. Однако у меня…   3.11.2006 2:18
Michael_Rybak   Во-первых, делаешь ты это как-то запутанно. Если…   3.11.2006 3:00
bLACK_wINGS   ВСЁЁЁ :rolleyes: :rolleyes: Дописал... Всего то …   12.11.2006 21:06


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 2.05.2024 20:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name