二维图搜索
#include <iostream>
#include <vector>
using namespace std;
/***
* 一个二维矩阵组成的迷宫,1表示无法通行,0表示可通行,起点(x0,y0),终点(x1,y1),搜索所有可达路径。
* 输入M,N的二维矩阵,输入x0,y0,x1,y1,输出所有所有路径。
* ***/
int M,N;
int maze[10][10];
int visited[10][10];
int xStart,yStart;
int xEnd,yEnd;
//右,下,左,上
vector<int> road;
int direction[4][2] = {
0,1,
1,0,
0,-1,
-1,0
};
void dfs(int x,int y)
{
if(x==xEnd&&y==yEnd)
{
cout<<"找到路径"<<endl;
for(const auto& dir:road)
{
switch(dir)
{
case 0:cout<<"右"<<'\t';
break;
case 1:cout<<"下"<<'\t';
break;
case 2:cout<<"左"<<'\t';
break;
case 3:cout<<"上"<<'\t';
break;
default:
break;
}
}
cout<<endl;
return;
}
for (int i = 0; i < 4; ++i) {
int x_next = x + direction[i][0];
int y_next = y + direction[i][1];
if (x_next<N&&x_next>=0&&y_next<M&&y_next>=0)
{
if(maze[x_next][y_next]==0&&visited[x_next][y_next]==0)
{
visited[x_next][y_next] = 1;
road.emplace_back(i);
dfs(x_next,y_next);
visited[x_next][y_next] = 0;
road.pop_back();
}
}
}
}
int main() {
cout<<"请输入迷宫大小:"<<endl;
cin>>M>>N;
for (int i = 0; i < M; ++i) {
cout<<"请输入迷宫第"<<i<<"行数据,1为障碍物:"<<endl;
for (int j = 0; j < N; ++j) {
cin>>maze[i][j];
}
}
cout<<"请输入起点:"<<endl;
cin>>xStart>>yStart;
cout<<"请输入终点:"<<endl;
cin>>xEnd>>yEnd;
cout<<"搜索开始:"<<endl;
visited[0][0] = 1;
dfs(0,0);
return 0;
}