Прежде чем написать что-то об этой проблеме, мне нужно, чтобы вы знали:Алгоритм кроссворда с заданной сетки
- Эта проблема моя домашняя работа (у меня было около 1 недели, чтобы вернуть рабочую программу)
- Я работал над этой проблемой около недели, каждый день, пытаясь выяснить собственное решение.
- Я не прошу полной программы; Мне нужно общее представление об алгоритме
Проблема:
Даны словник и "сетка", например:
сетки (X означает любую букву):
X X
XXXX
X X
XXXX
словник:
ccaa
baca
baaa
bbbb
Вы должны найти пример «решение» - возможно ли вставить слова из списка слов в заданную сетку? Если есть хотя бы одно решение, напечатайте его (в зависимости от того, что правильно). Если нет - печатать сообщение, то нет возможного решения. Для данного примера, есть решение:
b c
baca
b a
baaa
Это трудно для меня, чтобы написать все, что я уже пробовал (потому что английский не является моим родным языком, и у меня также есть много статей с неправильных идей).
Мой наивным алгоритм работает что-то вроде этого:
Первое слово, нужно только правильную длину, так что найти (первая?) Слово с правильной длины (я буду использовать данный пример сетки и словник, чтобы продемонстрировать то, что я думаю):
c X cXXX a X aXXX
для первого общего письма (на пересечении 2-х слов) найти любое (первое) слово, которое соответствует сетке (так, иметь надлежащую длину и общее письмо на правильное положение). Если таких слов нет, вернитесь к (1) и произнесите другое первое слово. В оригинальном примере нет слова, которое начинается с «c», поэтому мы возвращаемся к (1) и выбираем следующие слова (этот шаг повторяется несколько раз, пока у нас нет «bbbb» для 1-го слова). Теперь мы имеем:
b X bXXX b X bXXX
И мы ищем слово (а), который начинается с «Ъ», например:
b X baca b X bXXX
Общий процесс: попытаться найти пары слов, подходит к данной сетке. Если таких слов нет, вернитесь к предыдущему шагу и используйте другую комбинацию - если таковой не существует - решения нет.
Все вышеизложенное хаотично, я надеюсь, что вы поймете хотя бы описание проблемы.Я написал проект алгоритма, но я не уверен, что это работает и как правильно его кодировать (в моем случае: C++). Более того, есть случаи (даже в примере выше), что нам нужно найти слово, которое зависит от от 2 или более слов.
Возможно, я просто не вижу ничего очевидного, может быть, я слишком глуп, возможно ... Ну, я действительно пытался решить эту проблему. Я не знаю английского достаточно хорошо, чтобы точно описать, что я думаю об этой проблеме, поэтому я не могу поставить здесь все свои заметки (я попытался описать одну идею, и это было сложно). Верьте или нет, я потратил много долгих часов, пытаясь найти решение, и у меня почти ничего нет ...
Если вы можете описать решение или дать нам подсказку, как решить эту проблему, я бы очень признателен этому ,
ли 'X's в сетке те же символы? то есть, если 'X' является 'a', тогда все' X' должны быть 'a'? – rendon
Нет, «X» означает любую букву, она показывает, как выглядит сетка («шаблон») кроссворда. И эти персонажи не обязательно должны быть одинаковыми. – exTyn
Можете ли вы добавить случай, когда нет решения? – rendon