パズルソルバーを作っています。これまでのところ、単語のすべての順列を行っていますが、たくさんあります! 12 文字の単語の場合、479001600 個のパーマがあります... ゲームは 16 文字のパズル (4x4) です
[A][B][C][D]
[E][F][G][H]
[I][J][K][L]
[M][N][X][O]
選択した文字の周囲にある文字だけで単語を作ることができます。つまり、たとえば、私は A の周りにいないので、AIM という単語を選択することはできません... しかし、「AFI」という単語を作成することはできます。A を選択し、次に F(A の対角図) を選択し、次に I を選択します。
順列の私のコードは
function permute( $tmp, $word, $level )
{
if ( strlen( $word ) > 2)
{
$this->display( $word );
//return ;
}
for ( $i = 0 ; $i < $this->original_word_length ; $i++ )
{
if ( $this->bOne_bond == true and $this->bonds[$level] != -1 and $i != $this->bonds[$level] and $level < $this->max_bonds ) continue ;
if ( strcmp( $tmp{$i}, "N" ) == 0 )
{
$word_tmp = $word ;
$word_tmp .= $this->original_word{$i};
$flags_tmp = $tmp ;
$flags_tmp{$i} = "Y";
$this->permute( $flags_tmp, $word_tmp, $level+1 );
}
}
}
隣接する文字に基づいて計算するにはどうすればよいですか?
編集: 解決策はこちらです。ありがとう