1

dev-cpp と wxwidgets を使ってパズルを解くプログラムを作成しました。

ユーザーは操作ブロックと結果ブロックを埋める必要があり、プログラムはそれを解決します。再帰アルゴリズムを使用して、繰り返されない9つの長さの数字の組み合わせをすべて生成します。それはかなり高速です。

ここまではすべて素晴らしいです!

しかし問題は、私のプログラムがブロック上のキャラクターに応じて動作するときです。+、-、* などに対する文字の比較のため、非常に遅い (答えが得られない)。私は CASE をやっている。

演算子を動的に作成できる方法またはプログラミング言語はありますか? したがって、演算子 ROW1COL2 を + に定義し、他のすべての操作についても同様に定義できます。

アプリのスクリーンショットを残しておくと、パズルの仕組みが理解しやすくなります。

http://www.imageshare.web.id/images/9gg5cev8vyokp8rhlot9.png

PD: アルゴリズムは機能します。簡単なパズルで試してみたところ、すぐに解決しました。

4

2 に答える 2

1

これが本当に探しているものかどうかはわかりませんが..
C++ や C# などのオブジェクト指向言語では、「Operator」基本クラスを作成し、この基本クラスから「PlusOperator」または「MinusOperator」を派生させることができます。 」など。これは、そのような case ステートメントを回避する標準的な方法です。

ただし、これでパフォーマンスの問題が解決するかどうかはわかりません。
このような問題に対して単純な総当たりを使用すると、指数関数的な解決策が得られます。これは、小さな入力の場合は高速に機能するように見えます-たとえば、すべての数字を完成させます。しかし、操作を完了したい場合は、より多くの可能性を伴うはるかに大きな問題になります。
そのため、CASE がなくても、プログラムで解決できない可能性があります。

この種の問題を解決しようとする正しい方法は、ヒューリスティック関数を使用する高度な検索方法を使用することです。たとえば、A* (A-star) アルゴリズムを参照してください。

幸運を!

于 2008-09-20T19:58:20.457 に答える
0

数値と演算子をオブジェクトとして表すことができるため、解析は解決の最初に 1 回だけ行われます。

于 2008-09-20T19:58:39.410 に答える