ここは私の素朴なアルゴリズムです。明らかに、すべての配列アクセスは境界チェックを尊重する必要があります。
1)グリッドの各チェックボードの色を確認してください。読んラインで
x.x.x.
.x.x.x
x.x.x.
.x.x.x
スキャン、それを(すべてのxは水平に、その行を下る)(ヒント:% 2
と* 2
ここにあなたの友人になります)、次のやって:
1aにのみ、次のパターンによ)次のXのいずれかのも同じ色であれば、現在のタイルは、タイルと同じ色1下、私の右側にある場合は、それが連続して3です:
.....
..XX.
.Xx.X
.X.xX
..XX.
図1b)の場合1つ下の左と同様です:
.....
.XX..
X.xX.
Xx.X.
.XX..
(私はあなたがチェックされ、中央のタイルからのオフセットとしてのXの位置を符号化することになる - のようなアレイのように、{0、-1}、{ - 1,0}、{ - 1,1 }など)
(または、ここではチェックのために1の5×5の配列として、そうでない場合は0を実装することができます - この答えでどのように見えるかに似ていますが、プレイフィールドをスキャンします。これはより速いかもしれません。考えていない!
2)隣り合う2つのタイルが同じ色である場合は、どちらかが同じ色であれば、そのタイルを2つ上または下にチェックします。行の3:行の
.
X
.
x
x
.
X
3)と同様に、左から右に読ん:
.X.xx.X
注:これはにあらゆる可能なスワップをチェックする素朴なアルゴリズムよりも高速である場合、私は見当がつかないそれが3列に並んでいるかどうかを確認してください!結局のところ、両方のアルゴリズムはO(n^2)なので、実装の詳細によりますが速くなります。
1)ソリューションを実装するまでは最適化しないでください。使用している実際のケースについては、解決策が遅すぎる
2)あなたは、最適化、あなたがより速くそれを作ったチェック!(そして、それでも動作することを確認してください - コードを分解する最適化よりも悪いことはありません:))
もちろん、これは最適化が楽しいものではありませんが、最適化の考え方に惑わされることはありませんすでに十分に速く、コードがあなたの心を行使したが、何もやっている;)
私は、これは十分に説明的ではないと思います。作品は空いているスペースにのみ移動できますか?もしそうなら、それらのスペースのどれくらいから始めていっぱいですか?または、それらはすべて満たされ、断片は交換されますか? _only_法的な動きは、その動きが3-in-a-rowを作り出すものですか?そうでないので、プレイヤーは、いくつかの3イン行ですべてのまで、周りの駒を動かし続けることができないのですか?または、ほとんどのスペースが占有されて動きが制限されているため制限されていますか?詳細を教えてください。あなたのアイデア_does_は賢いようです。私はあなたにそれをあげるよ!彼らはすべての占有されているacheong87 @ –
は、あなたがそれが作品のスワップと唯一の合法動きである行の3を作成する1であると言うようなので、申し訳ありません私は明確にしてきたはずです。 – mao
は、なぜあなたはそれを効率的にする必要がありますか? 8 * 7グリッドの場合でも、素朴なソリューションでも1フレーム未満で終了します。 – Patashu