//dfs迷宫回溯问题 求起点到终点的所有路径
#include<bits/stdc++.h>
using namespace std;
int num[50000][5];//记录路径 num[i][0]第i步的横坐标num[i][1]纵坐标
int ax,ay,bx,by,k,pd;
int cx[4]={0,-1,0,1};//转移方向
int cy[4]={-1,0,1,0};
bool vis[20][20];//判断是否访问过
int map1[20][20];//图
void print()//输出路径
{
if(pd==0)
{
pd=1;
}
for(int h=0;h<=k-1;h++)
cout<<"("<<num[h][0]<<","<<num[h][1]<<")"<<"->";
cout<<"("<<bx<<","<<by<<")"<<endl;
}
void dfs(int x,int y)
{
if(x==bx&&y==by)//终止条件
{
print();
return;
}
else
{
for(int i=0;i<=3;i++)
//判断
if(map1[x+cx[i]][y+cy[i]]==1&&vis[x+cx[i]][y+cy[i]]==0)
{
vis[x][y]=1;
num[k][0]=x;
num[k][1]=y;
k++;//k是步数
dfs(x+cx[i],y+cy[i]);
//回溯能够再次访问
vis[x][y]=0;
k--;
}
}
}
int main()
{
int m,n;
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
cin>>map1[i][j];
cin>>ax>>ay;
cin>>bx>>by;
dfs(ax,ay);
if(pd==0)
cout<<"-1";
return 0;
}
P1238 [DFS回溯]
最新推荐文章于 2024-08-26 00:02:00 发布