すべて同じサイズの文字列のベクトルがあります。
ソリューションとして、いくつかの条件を満たす文字列のリストを作成する必要があります。
擬似コードアルゴリズムは次のようになります。
backtrack(N)
if solution_valid()
print solution
else
for each word in vector
if(possible candidate)
backtrack(N+1)
実際にコードを書く方法に迷いました。
現在のソリューションを保存する方法、関数に渡すパラメータの種類がわかりません...
これは私が持っているものですが、それは完全に間違っていると思います:
int backtrack(vector<string> &dictionary, vector<string> &solution, int current_row)
{
cout << "current row: "<< current_row << " of: " << rows << endl;
if(current_row == rows /*&& square_completed(solution)*/)
{
vector<string>::iterator word;
for(word = solution.begin(); word != solution.end(); ++word)
{
cout << *word << endl;
}
return 0;
}
vector<string>::iterator word;
for(word = dictionary.begin(); word != dictionary.end(); ++word)
{
backtrack(dictionary,solution,current_row+1);
solution.push_back(*word);
}
return 1;
}
問題は、ソリューションが制御なしで成長し続けることです。対処方法を教えてください。そして適切なバックトラックを行いますか?