我正在为迷宫编写寻找路径解决方案[30] [30] 我在路径查找功能中使用了回溯; 这是伪代码:
bool find_path(myMap,myVisited,myPath,v,h)
[v,h]
,然后为该点运行find_path
函数h=29
,则在路径上标记,然后返回true 当我运行它时,它总是给出分段错误。我尝试了不同的方法,但都给出了相同的错误? 输出应该像这样的图像: http://postimg.org/image/cd8unwet5/ 这是我的代码:
// myMap ='.' is a block on map
//myVisited ='*' room visited
bool isSafe(char myMap[30][30], char myVisited[30][30], int v,int h){
if(v>=0||v<30||h>=0||h<30||myMap[v][h]!='.'||myVisited[v][h]=='*')return true;
return false;}
//3 map
//myMap contain the maze
//myVisited use to mark room visited
//myPath is final path.
bool find_path(char myMap[30][30],char myVisited[30][30],char myPath[30][30], int v,int h){
//giving h=-1 and v=-1 , find starting point.
if(h==-1&&v==-1){
h=h+1;
for (v=0;v<30;v++){
if(myMap[v][h]!='.'&& h==0) {find_path(myMap,myVisited,myPath,v,h);}
}
}
myVisited[v][h]='*'; //mark room as visited.
if(h==29){ //stop when column is 29 and mark on path
myPath[v][h]='*';
return true;}
if(isSafe(myMap,myVisited,v,h-1)==true){ //if room is okie to access
if(find_path(myMap,myVisited,myPath,v,h-1)==true){ // there is way out
myPath[v][h]='*'; //mark on myPath
}
}
//.......same code for other room
if(isSafe(myMap,myVisited,v,h+1)==true){ //if room is okie to access
if(find_path(myMap,myVisited,myPath,v,h+1)==true){ // there is way out
myPath[v][h]='*'; //mark on myPath
}
}
if(isSafe(myMap,myVisited,v-1,h)==true){ //if room is okie to access
if(find_path(myMap,myVisited,myPath,v-1,h)==true){ // there is way out
myPath[v][h]='*'; //mark on myPath
}
}
if(isSafe(myMap,myVisited,v+1,h)==true){ //if room is okie to access
if(find_path(myMap,myVisited,myPath,v+1,h)==true){ // there is way out
myPath[v][h]='*'; //mark on myPath
}
}
if(isSafe(myMap,myVisited,v+1,h-1)==true){ //if room is okie to access
if(find_path(myMap,myVisited,myPath,v,h-1)==true){ // there is way out
myPath[v][h]='*'; //mark on myPath
}
}
if(isSafe(myMap,myVisited,v-1,h-1)==true){ //if room is okie to access
if(find_path(myMap,myVisited,myPath,v-1,h-1)==true){ // there is way out
myPath[v][h]='*'; //mark on myPath
}
}
if(isSafe(myMap,myVisited,v-1,h+1)==true){ //if room is okie to access
if(find_path(myMap,myVisited,myPath,v-1,h+1)==true){ // there is way out
myPath[v][h]='*'; //mark on myPath
}
}
myVisited[v][h]='.';
return false;//back track
return false;}