Такую задачу мне дали в моем университете, может у кого есть интересный алгоритм решения задачи. В stackoverflow есть несколько решений для этого, но ни одно из них не подходит (потому что они перебирают все возможности).
Задача: найти все возможные комбинации для размещения заданных слов в заданной таблице, сетке (прямоугольной, см. ввод ниже). Свободных клеток быть не должно, а слово может располагаться слева направо или сверху вниз. Слова не могут располагаться слово за словом в строке (столбце).
Вход: прямоугольная область, пример:
+-----+
| * |
| |
+-----+
or
+-----+
| * |
| |
| *|
| * |
+-----+
Затем после этого вводятся разные слова (следующие входные данные), чтобы заполнить эту сетку, например:
cdi
zobxzst
tdxic
r
sc
zro
and etc ...
Номер изначально неизвестен, но вводится до конца стандартного ввода — активный EOF.
Вывод: если существует одно решение, выведите это возможное решение в заполненной сетке. Если нет решения или количество решений, то выведите 0 или это точное число.
Пример:
(таблица введена)
+-----+
| * |
| |
| *|
| * |
| * *|
| * |
| |
+-----+
Затем слова cdi
zobxzst
tdxic
r
sc
zro
rgfvacd
oikf
df
x
c
r
xvf
ogish
za
sh
fc
hh
h
bfkh
(Каждый в качестве ввода, но здесь разделен пробелами.)
Вывод (только 1 решение):
+-----+
|zro*h|
|ogish|
|bfkh*|
|xvf*r|
|za*c*|
|sc*df|
|tdxic|
+-----+
Важное примечание: Вводимая сетка ограничена всего 16 (!) ячейками, количество слов меньше 60. Я написал алгоритм перебора всех возможных комбинаций, но у меня он не сработал, так как время выполнения ограничено (10 сек, я думаю), и эта проблема не может быть решена грубым алгоритмом (например, 15 на сетке 15 и около 60 возможных или более возможных перестановок, которые могут быть обработаны около 1 дня? на обычном ПК с частотой 2 ГГц).
Возможно, существует другое уникальное решение. Может быть, эта проблема более математическая, чем программирование, может быть, можно использовать какие-то комбинации влево-вправо по сравнению с вверх-вниз? или, может быть, взвешенные ячейки?
P.S. У меня есть 3 недели, чтобы решить эту проблему, если нет, я могу опубликовать решение здесь через 3 недели (хорошие новости);)
cdi
,zobxzst
,tdxic
, я не думаю, что они означают то, что вы думаете. :) - person James Kolpack   schedule 13.11.2012