|
|
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Условие: задана сетка кроссворда, есть словарь, необходимо заполнить сетку словами. У кого нибудь есть идеи алгоримов или структур данных которые можно использовать.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 15:18 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
KetanУсловие: задана сетка кроссворда, есть словарь, необходимо заполнить сетку словами. У кого нибудь есть идеи алгоримов или структур данных которые можно использовать..Алгоритм составления всевозможных кроссвордов вообщем-то очевиден. Вряд ли без рекурсии обойдешься. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 16:35 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Мне кажеца тут надо писать програму !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 16:39 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Сетку мона описать массивами, описывающими пересечения: 1-й элемент длина, далее идут тройки (номер символа в данной строке, номер строки с которой пересекается, номер символа в строке с которой пересекается). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 16:46 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
MasterZivМне кажеца тут надо писать програму !!!Да ладно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 16:47 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
сделал через рекурсию, но слишком долго если перебирать все ветки(ну не все а до первой подходящей) нужна какая нибудь умная рекурсия или чтото принципиально другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 17:33 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Делаешь класс "слово". Изначально заполняется нулями. Список "зависимых объектов-слов" (например указатель на объект - ) (Это м.б. карта(map), т.к. два слова в двух и более местах не пересекаются. Реализация этой функциональности может быть вынесена в отдельный класс. Но можно и тут.) Он должен уметь: * Отвечать на вопрос "Заполнено ли слово целиком?" (тут нужны две проверки: 1) все буквы заполнены 2) такое слово есть в словаре) * отвечать на вопрос "Можно ли вставить заданное слово?" (тут проверяем 1) подходит ли слово по кол-ву букв 2) если некоторые буквы уже заполнены по-другому, то возвращаем false) * Если карта зависимостей ведется в этом классе, то уметь проставлять буквы в зависимых словах. Итак, инициализируем vector или list из "слов" (создаем их в нужном количестве и правильно заполняем список зависимостей в каждом объекте) Дальше приблизительно такой цикл: * Берем наугад слово из словаря и если его нет среди уже заполненных слов, пытаемся его запихнуть в короссворд. * если кроссворд заполнен, то улыбаемся и потираем руки (break). * переходим к следующей итерации цикла (тут вполне можно зациклиться намертво, если ни одно слово из словаря добавить нельзя, а кроссворд еще не заполнен. варианты: 1) по нажатию на клавишу начинать все сначала; 2) Начинать сначала по таймауту или кол-ву итераций цикла; 3) завести массив bool'ов "а это слово уже попробовано. не подошло" и при тотальном его заполнении начинать заново 4, 5, 6 ... :-)) Это навскидку. Конечно, уже сейчас можно начинать оптимизировать метод, но для большого словаря (много больше кроссворда) вполне подойдет. И описывать это imho дольше, чем писать программу :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 19:41 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Вместо Gradient(например указатель на объект - ) следует читать "(например указатель на объект - позиция в this - позиция в объекте, на который указатель)" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.02.2006, 19:47 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Ketanсделал через рекурсию, но слишком долго если перебирать все ветки(ну не все а до первой подходящей) нужна какая нибудь умная рекурсия или чтото принципиально другоеЯ и говорил, что над оптимизацией думать надоть. Если словарь достаточно большой, то имеет смысл разбить все слова на группы по кол-ву символов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 10:47 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Ketanсделал через рекурсию, но слишком долго если перебирать все ветки(ну не все а до первой подходящей) нужна какая нибудь умная рекурсия или чтото принципиально другоеВ процессе подстановок слов можно сразу отметать варианты, которые не согласуются с правилами языка (допустим, наинаются на "ь", последовательности букв, типа "йы", "аь", "шы", ну и т.д.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 10:58 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
А словарь и был представлен в виде матрицы [длина слова, слова] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 10:59 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
Кроме того, мона подумать над очередностью перебора строк. Лучше всего организоваоть его так, чтобы каждая следующая проверяемая строка имела максимальное кол-во пересечений с уже заполненными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.02.2006, 12:29 |
|
||
|
Алгоритм генерации кроссворда
|
|||
|---|---|---|---|
|
#18+
На самом деле все намного сложнее, чем вы думаете. Алгоритм составления кроссвордов вообще неочевиден. Ну да, конечно, если вам нужно заполнить сетку из нескольких слов с небольшим количеством пересечений, то тут подойдет обычный бэктрекинг. А если вы задумываетесь уже об оптимизации, о составлении кроссвордов на сотню слов с большой плотностью пересечений, то обычная рекурсия тут уже не поможет, нужны алгоритмы другого типа. Кое что можно посмотреть на http://www.vologda.ru/~apiskunov/science.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 20:36 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=321&tid=2029954]: |
0ms |
get settings: |
9ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
77ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 428ms |

| 0 / 0 |
