题解
2024-12-12 21:43:11
发布于:浙江
64阅读
0回复
0点赞
你们题解实在是太核癌渴氢了,来发个简单点的代码吧
#include<bits/stdc++.h>
using namespace std;
struct Point{//点
int x,y;
};
stack<Point>b;
stack<Point>c;//别问我为啥用两个栈,用vector的确简便
char a[101][101]; //地图
bool vis[101][101];//标记数组
int dx[4]={0,-1,0,1};//方向数组*2
int dy[4]={-1,0,1,0};
int n,m,sx,sy,fx,fy;//地图长与宽、起点与终点
bool flag;//是否能到终点
void dfs(int x,int y){//深搜
if(x==fx&&y==fy){
flag = 1;//可以到
b.pop();
while(b.size()){//把栈倒过来
c.push(b.top());
b.pop();
}
while(c.size()){//输出并放回
cout << "("<<c.top().x<<","<<c.top().y<<")->";
b.push(c.top());
c.pop();
}
cout<< "("<<fx<<","<<fy<<")"<<'\n';//输出终点
b.push(Point({fx,fy}));
return ;
}
for(int i = 0;i<4;i++){
int r = x+dx[i];
int c = y+dy[i];
if(r>=1&&r<=n&&c>=1&&c<=m&&a[r][c]=='1'&&vis[r][c]==0){
vis[r][c]=1;//标记
b.push(Point({r,c}));//将点加入栈
dfs(r,c);
b.pop();//将点弹出
vis[r][c]=0;//回溯
}
}
}
int main(){
cin>>n>>m;
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
cin>>a[i][j];
}
}
cin>>sx>>sy>>fx>>fy;//输入
b.push(Point({sx,sy}));//将起点放入栈中
vis[sx][sy]=1;//标记起点
dfs(sx,sy);//开搜
if(!flag)cout<<"-1";//到不了输出-1
return 0;
}
不要脸的求个赞和关注
这里空空如也
有帮助,赞一个