私は、n 個のクイーン問題 (標準のチェス クイーンの動きを使用して、n個のチェス クイーンをn x nチェス盤に配置して、他のクイーンをキャプチャできないようにする問題)を解決するプログラムに取り組んでいます。私は発見的アルゴリズムを使用しており、各行に 1 つのクイーンを配置し、まだ占有されていない列からランダムに列を選択することから始めます。このステップは最適化の機会だと感じています。コードは次のとおりです (C++):
vector<int> colsleft;
//fills the vector sequentially with integer values
for (int c=0; c < size; c++)
colsleft.push_back(c);
for (int i=0; i < size; i++)
{
vector<int>::iterator randplace = colsleft.begin() + rand()%colsleft.size();
/* chboard is an integer array, with each entry representing a row
and holding the column position of the queen in that row */
chboard[i] = *randplace;
colsleft.erase(randplace);
}
コードから明らかでない場合: 各列の整数を含むベクトルを作成することから始めます。次に、行ごとに、ベクトル内のランダムなエントリを選択し、その値を .xml 内のその行のエントリに割り当てますchboard[]
。次に、そのエントリをベクターから削除して、他のクイーンで使用できないようにします。
ベクトルの代わりに配列とポインターを使用できるメソッドに興味があります。それとも<list>
?for
ループ以外に、ベクトルを順番に埋めるより良い方法はありますか? いくつかの提案を聞きたいです!