이 코드를 디버깅하려고했지만 지금은 정말 도움이 필요합니다. 매우 귀하의 문제가 스택 오버 플로우되어단순 경로 찾기에서의 세그먼트 오류 코드
#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;
}
, 나는 당신의 재귀가 또 다시 같은을 평가하고 확신합니다. 동적 프로그래밍을 사용하여이 문제에 접근하십시오. –
또한'(grid [I] [j] == search [0])'의'else'가 틀린 것 같습니다. 연속 경로를 찾는 경우 문자가 일치하지 않으면 이웃을 검색하지 않아야합니다. –
코드가 실행되는 모든 단계를 분석하지 않았습니다. 그러나 사용하기 전에 '검색'의 범위를 확인해야한다고 생각합니다. 희망이있다 도움이 되길 바랍니다 –