#include<vector>
#include <iostream>
#include<queue>
#include<cstring>
using namespace std;
int a[110][110];
queue<pair<int,int>> q;
int n,m;
int dx[]= {0,1,0,-1};
int dy[]={-1,0,1,0};
int st[110][110],dis[110][110];
vector<pair<int,int>> p;
void dfs(int x,int y){
if(x==n-1&&y==m-1){
for(auto [xx,yy]:p){
cout<<"("<<xx<<','<<yy<<")"<<'\n';
}
}
for(int i = 0;i<4;i++){
int xx = x+dx[i],yy = y+dy[i];
if(xx<0||xx>=n||yy<0||yy>=m){
continue ;
}
if(a[xx][yy]==0&&st[xx][yy]==0&&dis[xx][yy]>(dis[x][y]+1)){
st[xx][yy] = 1;
dis[xx][yy] = dis[x][y]+1;
p.push_back({xx,yy});
dfs(xx, yy);
st[xx][yy] = 0;
p.pop_back();
}
}
}
int main() {
cin>>n>>m;
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
cin>>a[i][j];
}
}
p.push_back({0,0});
memset(dis,0x3f,sizeof dis);
memset(st,0,sizeof st);
st[0][0] = 1;
dis[0][0] = 0;
dfs(0,0);
return 0;
}
// 64 位输出请用 printf("%lld")
采用dfs加回溯的方式,对每个点进行搜索,如果可以到达终点,输出路径即可。



京公网安备 11010502036488号