そのような問題は私の大学で私に与えられました。おそらく、誰かが問題を解決するための興味深いアルゴリズムを持っているでしょう。スタックオーバーフローにはいくつかの解決策がありますが、どれも問題ありません (すべての可能性をループしているため)。
問題: 与えられた単語を与えられたテーブル、グリッド (四角形、以下の入力を参照) に割り当てるためのすべての可能な組み合わせを見つけます。フリー セルがあってはならず、単語は左から右または上から下に配置できます。行 (列) 内の単語の後に単語を配置することはできません。
入力: 長方形の領域、例:
+-----+
| * |
| |
+-----+
また
+-----+
| * |
| |
| *|
| * |
+-----+
その後、さまざまな単語が入力され (次の入力データ)、次のようなグリッドが埋められます。
cdi
zobxzst
tdxic
r
sc
zro
and etc ...
番号は最初は不明ですが、標準入力 (アクティブな EOF) の終わりまで入力します。
出力: 1 つの解が存在する場合、塗りつぶされたグリッド内にその可能な解を出力します。解または解の数がない場合は、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! 通常の 2GHz PC で約 1 日で処理できる可能性のある順列またはそれ以上の可能性があります)。
別のユニークなソリューションが存在する可能性があります。おそらく、この問題はプログラミングよりも数学的なものであり、上下と比較して左右のコンボを使用することは可能でしょうか? それとも加重セルですか?
PS その問題を解決するのに 3 週間かかります。そうでない場合は、3 週間後にここに解決策を投稿できます (朗報) ;)