Использование рекурсии для решения лабиринтов в C++?
Я пытаюсь создать программу, которая может решать лабиринты с помощью рекурсии. Я основываю свой код на нескольких шагах, которые можно найти в интернете, а именно:
- if (x, y outside maze) return false
- if (x,y-цель) return true
- if (x,y not open) return false
- отметьте x, y как часть пути решения
- if (FIND-PATH (North of x, y) = = true) return true
- if (FIND-PATH (East of x, y) = = true) return true
- if (FIND-PATH (South of x, y) = = true) return true
- if (FIND-PATH (West of x, y) = = true) return true
- снимите отметку x, y как часть пути решения
- return false
bool path (string maze[], int x, int y){
values val;
bool check;
//for (int k=0; k<val.xDim; k++) cout<<maze[k]<<endl;
cout<<x<<":"<<y<<endl;
if (x>val.xDim || y>val.yDim || x<0 || y<0) {cout<<"endn"; return false; }
if (maze[x][y]=='x') return true; //If exit is reached
if (maze[x][y]=='%' || maze[x][y]=='+') return false; //If space is filled
maze[x][y]='+';
if (path(maze, x-1, y)==true) return true;
cout<<"endtwon";
if (check=path(maze, x, y+1)==true) return true;
if (path(maze, x+1, y)==true) return true;
if (path(maze, x, y-1)==true) return true;
maze[x][y]='.';
return false;
}
int main(){
if (path(maze, val.startX-1, val.startY)==true) {
for (int k=0; k<val.xDim; k++) cout<<maze[k]<<endl;
} else cout<<"No solution found.n";
}
Образец лабиринта (где e-вход, а x-выход):
%e%%%%%%%%%
%...%.%...%
%.%.%.%.%%%
%.%.......%
%.%%%%.%%.%
%.%.....%.%
%%%%%%%%%x%
Вывод:
-1:1
end
No solution found.
Из того, что я могу сказать, метод path должен начинаться с проверки пространства непосредственно над вход, который находится вне лабиринта (возвращение ложное). После этого он должен проверить Восток (и так далее). Однако, когда я запускаю его, функция возвращает false и не может продолжить выполнение следующих инструкций if. Об этом свидетельствует тот факт, что "end" печатается, а "endtwo" (найденный после проверки Севера) - нет. Я не уверен, есть ли какая-то проблема с моей логикой рекурсии или моей реализацией рекурсии, поэтому я надеюсь на некоторое разъяснение по этому вопросу.
Заранее спасибо!