質問

私はBFSを実装していますが、それがやろうとしていることは、パズルの最短の解決策を見つけるために順序付けられたツリーをたどることです。

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

または宣言した回数を記録し、ハードコーディングする必要がありますか...

スナップショットsnapshot2; スナップショットsnapshot3; スナップショットsnapshot4; など。

役に立ちましたか?

解決

方法があります-プリプロセッサのトークンを使用します-貼り付け演算子。これにより、変数に基づいて名前を作成できるため、次を指定します。

#define S(variable) snapshot#variable

そして、snapshot1、snapshot2などの名前の変数を作成できます:

Snapshot S(1)
Snapshot S(2)

ただし、これが本当に必要なのかはわかりません。実際に一度このテクニックを使用したことがありますが、それはコードジェネレーター用でした。

他のヒント

多くのオブジェクトがどのように作成され、どのように保持されるかわからない場合、どのように作成して保持するのかを尋ねていると思います。

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

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

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

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

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

申し訳ありませんが、キュー全体はちょっとした混乱を引き起こします。

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

これらのピースの作成に取り掛かるとき、ある種の変数命名スキームを使用してこれらのピースに名前を付けることはできますか。単なる例としてこのように......

for (int i-0; i < constraint; i++)
Piece "Piece"+i = new Piece();

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

edit:余談ですが、BFS、DFS、A *などの基本を扱ったAIクラスのあなたのものに似ていると思う割り当てを行いました。 &quot; snapshots&quot;のオブジェクトに一意の名前を付ける必要は一度もなかったので、キューを使用しました。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top