Кроссворд C#- искал algorthm
Я хотел запрограммировать кроссворд на C# с такими условиями:
- Слова не могут быть повторены.
- Слова могут быть расположены горизонтально, но бегут только слева направо.
- Слова могут быть расположены вертикально, но только от максимума до минимума.
- Горизонтальное слово должно пересекать одно или несколько вертикальных слов.
- Вертикальное слово должно пересекать одно или несколько горизонтальных слов.
- Каждое слово должно быть разделено пробелами или краем сетки.
Размер поля не указан. Учитывая список слов, алгоритм должен найти наилучший выход для кроссворда, а размер поля должен быть минимальным. Моя проблема - переменный размер поля. У кого-нибудь есть идея, рассматривающая, как алгоритм может выглядеть?
1 ответ
Это очень широкий вопрос, я думаю, вам нужно потратить некоторое время на размышления о дизайне, прежде чем начинать пытаться кодировать решение.
Некоторые возможные подзадачи, которые вам нужно решить:
- Вам понадобится какое-то хранилище слов слов, вы сделаете свой собственный или что-то будете использовать онлайн?
- Вам понадобится какой-нибудь способ проверки букв в этих словах, чтобы убедиться, что в словах есть общие буквы, которые вы можете использовать для скрещивания слов друг с другом
- Вам нужно будет измерить длину слов и убедиться, что слова не пересекают друг друга (если только они не должны пересекаться!) Или не помещаются на экране. Вам нужно будет повторно проверять эти правила каждый раз, когда вы создаете сетку, чтобы убедиться, что она действительна
- Вы можете сохранить сетку в виде массива nxn, слова должны быть записаны либо в одной строке, либо в столбце, при условии, что вы не используете диагонали.
- Чтобы ваши слова шли слева направо или сверху вниз, вы должны убедиться, что индекс начальных букв всегда меньше, чем буква в конце.
- Возможно, вам также понадобится сохранить количество слов в строке или столбце, чтобы обеспечить равномерное расстояние между словами в сетке.