#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加回溯的方式,对每个点进行搜索,如果可以到达终点,输出路径即可。