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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM