C语言 递归实现迷宫寻路问题

迷宫问题采用递归和非递归两种方法,暂时完成递归方法,后续会补上非递归方法

#include<stdio.h>
#include<stdbool.h>

bool findPath(int a[][8],int i,int j){//递归找出口
    if(i==6&&j==6)//如果找到了目标a[6][6]则返回true
        return true;
    if(a[i][j]==0)//若当前路径未被找到,则继续
    {
        a[i][j]=2;//当前走的路径置为2,表示走过
        if(findPath(a,i+1,j)||findPath(a,i,j+1)||findPath(a,i-1, j)||findPath(a,i-1,j))//每个方向都判断,依次展开递归,寻找最佳路径
            return true;//若选择的路径可以走,则返回true
        else{//若当前选择的路径不能走
            a[i][j]=0;//弹栈并恢复路径,回退到上一次的位置
            return false;
        }
    }
    else//未能找到最终点
        return false;
}
void print(int a[][8])//打印当前的二维数组表
{
    for(int i=0;i<8;i++){
        for(int j=0;j<8;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
}
int main(){
    int a[8][8]={0};
    for(int i=0;i<8;i++)//设置围墙和障碍物
    {
        a[0][i]=1;
        a[i][0]=1;
        a[7][i]=1;
        a[i][7]=1;
    }
    a[3][1]=1;
    a[3][2]=1;
    print(a);
    printf("-----------after find path-----------\n");
    findPath(a, 1, 1);
    print(a);
}