算法思路:给定一个正方形迷宫,0代表可走,1代表不可走,给定一个起点ox和oy和一个终点ex和ey(注意:第一个数代表行,第二个数代表列),然后调用深度优先搜索DFS函数,按上右下左的顺序依次遍历,调用前先将相应位置置为1代表已访问,然后调用DFS函数,直到到达终点将标记位设置为1,之后即可通过标志位停止对DFS函数的调用(深度优先搜索只能找到一条从起点到终点的路径,但不一定是最短的)。
#include<iostream>
using namespace std;
int ex,ey,n,a[101][101],f=0; //变量f为标记变量
int dx[4]={-1,0,1,0}; //定义位移数组
int dy[4]={0,1,0,-1};
void DFS(int x,int y){
if(f==1){ //标记为1则结束递归
return;
}
if(x==ex&&y==ey){ //判断是否到达终点
f=1;
return;
}
for(int i=0;i<4;i++){
int newX=x+dx[i];
int newY=y+dy[i];
if(newX>=1&&newX<=n&&newY>=1&&newY<=n&&a[newX][newY]==0){
a[newX][newY]=1; //将访问位置为已访问
cout<<"-->("<<newX<<","<<newY<<")";
DFS(newX,newY);
if(f==1) //判断是否已到达终点
return;
}
}
return;
}
int main(){
int ox,oy;
cout<<"请输入迷宫边长"<<endl;
cin>>n;
cout<<"请输入迷宫"<<endl;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
cout<<"请输入起点坐标"<<endl;
cin>>ox>>oy;
cout<<"请输入终点坐标"<<endl;
cin>>ex>>ey;
cout<<"("<<ox<<","<<oy<<")"; //输出起点坐标
DFS(ox,oy);
return 0;
}