2

私は BFS を実装しています。BFS が行うことは、順序付けされたツリーを調べて、パズルの最短の解決策を見つけることです。

これから行うことは、パズルの各ピースの現在の位置を保持するスナップショット オブジェクトを作成することです。このスナップショット オブジェクトをキューに追加し、それが解決策かどうかを確認します。ただし、これらのスナップショットはオンザフライで作成しています。では、スナップショット オブジェクトがキューに入れられたときにその名前を自動的に生成する方法はありますか?

または、私が行った宣言の数を追跡し、それをハードコーディングする必要があります...

スナップショット スナップショット2; スナップショット スナップショット3; スナップショット スナップショット4; 等..

4

6 に答える 6

4

いくつあるかわからないのに、どうやってたくさんのオブジェクトを作って保管するのかとおっしゃっていると思います。

オブジェクトの配列を作成する必要があります。次に、スナップショット[1]、スナップショット[2]...スナップショット[i]としてそれらにアクセスできます。

于 2008-10-19T04:23:40.033 に答える
1

方法があります -プリプロセッサの Token-Pasting Operatorを使用します。これにより、変数に基づいて名前を作成できるため、次のように指定します。

#define S(variable) snapshot#variable

また、snapshot1、snapshot2 などの名前の変数を作成できます。

Snapshot S(1)
Snapshot S(2)

ただし、これがあなたが本当に望んでいるものかどうかはわかりません。この手法を実際に一度使用したことがありますが、それはコードジェネレーター用でした。

于 2008-10-19T19:10:53.117 に答える
0

少なくともいくつかの(架空の?)アドオンがなければ、C++で変数名を動的に作成することはできません。

編集:余談ですが、私はAIクラスであなたと似ていると思う割り当てを行いました。ここでは、BFS、DFS、A*などの基本をカバーしました。「スナップショット」に一意の名前のオブジェクトを用意する必要は一度もありませんでした。私はキューを使用しました。

edit2:スナップショットの数を追跡する必要がある場合は、オブジェクトを作成するたびに増分するカウント変数を作成します。

于 2008-10-19T04:21:49.587 に答える
0

標準テンプレート ライブラリのキューを使用してから、Snapshot オブジェクトを作成してキューに入れる関数を作成できます。この関数に静的変数を与えます。この変数は呼び出されるたびに増分され、スナップショットの id フィールドに書き込まれます。

http://www.csci.csusb.edu/dick/samples/stl.html

http://www.cppreference.com/wiki/stl/queue/start

于 2008-10-19T03:36:46.713 に答える
0

これにはもっと情報が必要だと思います。これらを単にキューからポップするだけである場合、名前が何であるかを気にする必要はありません。キュー内のオブジェクトは、配列に実装しない限り、通常は番号が付けられません。

于 2008-10-19T04:07:30.597 に答える
0

申し訳ありませんが、キュー全体が不必要な混乱を引き起こします。

別の例を見てみましょう。したがって、このパズルでは、パズルのピースの数はユーザーによって指定されます。私がプログラムを設計している方法は、パズルの各ピースが独自のオブジェクトであることです。

したがって、これらのピースを作成するとき、これらのピースに名前を付けるために、ある種の変数命名スキームを使用できますか? 例として、このようなもの...

for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();
于 2008-10-19T04:15:12.890 に答える