#include <iostream> #include <cstring> #include <vector> using namespace std; int m,n; bool flag=0;//表示是否到达了终点 vector<vector<int>> ans;//记录路径答案 void dfs(int i,int j,vector<vector<bool>> st,vector<vector<int>> map){ st[i][j]=1; if(i==m&&j==n){ flag=1;//表示已到达终点 ans.push_back({i-1,j-1});//记录 return; } if(!st[i][j+1]&&map[i][j+1]==0&&!flag){//到达终点前,遇见可以走的路就要走 dfs(i,j+1,st,map); } if(!st[i][j-1]&&map[i][j-1]==0&&!flag){//到达终点前,遇见可以走的路就要走 dfs(i,j-1,st,map); } if(!st[i+1][j]&&map[i+1][j]==0&&!flag){//到达终点前,遇见可以走的路就要走 dfs(i+1,j,st,map); } if(!st[i-1][j]&&map[i-1][j]==0&&!flag){//到达终点前,遇见可以走的路就要走 dfs(i-1,j,st,map); } if(flag) ans.push_back({i-1,j-1});//到达终点之后,返回时记录路径 return; } int main() { cin>>m>>n; vector<vector<int>> map(m+2,vector<int>(n+2));//记录迷宫 vector<vector<bool>> st(m+2,vector<bool>(n+2));//记录当前是否已经到达过 for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cin>>map[i][j]; } } for(int i=0;i<m+2;i++){ map[i][0]=1; map[i][n+1]=1; } for(int j=0;j<n+2;j++){ map[0][j]=1; map[m+1][j]=1; }//初始化迷宫 dfs(1,1,st,map);//起点出发开始dfs for(int i=ans.size()-1;i>=0;i--){ cout<<"("<<ans[i][0]<<","<<ans[i][1]<<")"<<endl;//倒序打印路径 } }