-
#include<iostream> using namespace std; //递归模拟迷宫回溯 bool setWay(int arr[][10],int i,int j) { if(arr[8][8]==2) return true; //挡板为1,空格为0,走过是通路为2,走过不是通路为3; else { if(arr[i][j]==0) { arr[i][j]=2; //策略为下右上左 if(setWay(arr,i+1,j)) return true; else if(setWay(arr,i,j+1)) return true; else if(setWay(arr,i-1,j)) return true; else if(setWay(arr,i,j-1)) return true; else { arr[i][j]=3; return false; } } else return false; } } int main() { int i,j,sum=0; int arr[10][10]={0}; for(i=0;i<10;i++) { arr[0][i]=1; arr[9][i]=1; arr[i][0]=1; arr[i][9]=1; } //设置挡板 arr[1][3]=1; arr[1][4]=1; arr[2][4]=1; arr[1][6]=1; arr[3][3]=1; arr[5][2]=1; arr[6][5]=1; arr[7][4]=1; arr[6][1]=1; printf("原始迷宫:\n"); for(i=0;i<10;i++) { for(j=0;j<10;j++) { cout<<arr[i][j]<<" "; } cout<<endl; } setWay(arr,1,1); cout<<"走完迷宫后"<<endl; for(i=0;i<10;i++) { for(j=0;j<10;j++) { cout<<arr[i][j]<<" "; } cout<<endl; } for(i=1;i<9;i++) for(j=1;j<9;j++) if(arr[i][j]==2) sum++; cout<<"找到迷宫出口需要"<<sum<<"步"<<endl; }
编译结果
代码简析:
- 使用二维数组模拟迷宫地图,地图边界用1表示障碍挡板,障碍挡板自己赋值设置即可,其它位置(数值为0的位置为通路)。
- 写一个递归函数设置迷宫出口,这里设置的迷宫出口为(8,8)若到达arr[8][8]==2就结束递归。
- 自己设计一个走迷宫的策略(可以决定你的走迷宫的步数多少),我的策略是下右上左,到达一个位置先调用自身先判断下方的路是否为通,若通将此位置赋值为2,若不通判断它右方的位置是否为通,以此类推,若你设置的终点(i,j)arr[i][j]==2递归结束。