我有一个字符串向量,大小都一样。
我必须构建一个满足某些条件的字符串列表作为解决方案。
伪代码算法将是这样的:
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;
}
问题是解决方案在不受控制的情况下不断增长。你能告诉我如何处理它吗?并进行适当的回溯?