我一直在嘗試調試此代碼,但現在真的需要幫助。它是將高度讚賞簡單路徑查找中的分段錯誤代碼
#include <stdio.h>
char grid[5][5] = {
{'t', 'z', 'x', 'c', 'd'},
{'a', 'h', 'n', 'z', 'x'},
{'h', 'w', 'o', 'i', 'o'},
{'o', 'r', 'n', 'r', 'n'},
{'a', 'b', 'r', 'i', 'n'},
};
int n = 5;
int found = 0; // flag indicating if string has been found
void find(int i, int j, char *search) {
if (i >= n || j >= n || i < 0 || j < 0) {
return ;
}
if (!search) {
found = 1;
return ;
}
if (grid[i][j] == search[0]) {
find (i+1, j, search+1);
find (i, j+1, search+1);
find (i+1, j+1, search+1);
find (i-1, j, search+1);
find (i, j-1, search+1);
find (i-1, j-1, search+1);
}
else {
find (i+1, j, search);
find (i, j+1, search);
find (i+1, j+1, search);
find (i-1, j, search);
find (i, j-1, search);
find (i-1, j-1, search);
}
}
int main() {
char s[] = {'h', 'o', 'r', 'i', 'z', 'o', 'n', '\0'}; // String to be searched
find(0, 0, s);
printf("%s\n", found ? "Found": "Not Found");
return 0;
}
你需要緩存一些價值觀,我相信你的遞歸一次又一次的評估相同。試着用動態編程來解決這個問題。 –
另外''(網格[I] [j] ==搜索[0])的'else'似乎不正確。如果您正在尋找連續路徑,則不應嘗試搜索鄰居,如果該字符不匹配。 –
我沒有分析你的代碼將運行的每一步。但我認爲你應該在使用它之前檢查'搜索'的範圍。希望它有幫助 –