2
我有一個字符串矢量,所有相同的大小。
我必須建立一個滿足一些條件的字符串列表作爲解決方案。遞歸函數調用 - 生成排列和回溯
的僞代碼的算法是這樣的:
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;
}
問題是解決方案在沒有控制的情況下不斷增長。 你能告訴我如何處理它嗎?並做一個適當的回溯?
這樣比較好...`for(word = dictionary.begin(); word
2011-02-05 19:22:16
@muntoo:爲什麼會更好? – sth 2011-02-05 19:24:58