用C错误回溯法解迷宫
我正在努力找到走出迷宫的最佳方法([N][N]数组,你有一个用C错误回溯法解迷宫,c,backtracking,maze,C,Backtracking,Maze,我正在努力找到走出迷宫的最佳方法([N][N]数组,你有一个is_min的原型吗?事实上,这条消息告诉了你几乎所有的事情。is_min的原型是什么意思?好的……那么展示完整的代码。Path的主要调用你需要在使用函数之前声明它们。如果你使用的是一个仍然允许古老的C90语义的C编译器,而不是在旧的C99语义或当前的C11语义中,编译器根据您使用的is_min()假设它返回一个int,当您定义它并说它返回void(无)时,它会感到不安相反。这就是错误消息的意思。至少,在使用函数之前要声明它们。通常,最
is_min
的原型吗?事实上,这条消息告诉了你几乎所有的事情。is_min的原型是什么意思?好的……那么展示完整的代码。Path的主要调用你需要在使用函数之前声明它们。如果你使用的是一个仍然允许古老的C90语义的C编译器,而不是在旧的C99语义或当前的C11语义中,编译器根据您使用的is_min()
假设它返回一个int
,当您定义它并说它返回void
(无)时,它会感到不安相反。这就是错误消息的意思。至少,在使用函数之前要声明它们。通常,最好在使用函数之前定义它-颠倒函数的顺序。
int search_path(int n, int maze[][N], int i, int j){
int maxlen = 400;
int current_best;
if (maze[i][j] == 0) return False;
if (maze[i][j] == -1) return False;
if (i==N-1 && j==N-1 ) return True;
maze[i][j] = -1;
if(i < N-1)
is_min(n,maze,i,j+1,&maxlen);
if (i >0 )
is_min(n,maze,i-1,j,&maxlen) ;
if (j < N-1 )
is_min(n,maze,i,j+1,&maxlen) ;
if (j >0 )
is_min(n,maze,i,j-1,&maxlen);
maze[i][j] = 1;
if ((maxlen == 400)||(maxlen ==0))
return False;
return maxlen+1;
};
void is_min(int n, int maze[][N], int i, int j, int *maxlen){
int current_best = search_path(n,maze, i, j);
if ((current_best < *maxlen) && (current_best > 0)){
*maxlen = current_best;};
};
void path(int n, int maze[][N])
{
//find best path, starting from 0,0
int best = search_path(n, maze, 0,0);
if (best == 0){
printf("No path found!\n");}
else
printf("Shortest path length is:%d\n", best);
}