迷宮問題采用遞歸和非遞歸兩種方法,暫時完成遞歸方法,后續會補上非遞歸方法
#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); }