#include <iostream>
#include <bits/stdc++.h>
using namespace std;
struct Node{
int x,y,pre,loc;
}nodes[600]; //存放走过的所有节点
int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};//用来控制方向
int mp[50][50]={0};//记录
int main()
{
int endX=2,endY=3;//终点
int m,n;
int res=0;
queue<Node> que;//存放用来待遍历的节点
scanf("%d %d",&m,&n);
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
scanf("%d",&mp[i][j]);
}
}
//当前节点
Node tmpNode;
tmpNode.x=0,tmpNode.y=0,tmpNode.pre=-1,tmpNode.loc=0;
nodes[res++]=tmpNode;
que.push(tmpNode);
while(!que.empty()){
tmpNode = que.front();
que.pop();
if(tmpNode.x==endX&&tmpNode.y==endY){
//到达终点的话逆序输出
do{
printf("(%d,%d)\n",tmpNode.x,tmpNode.y);
tmpNode=nodes[tmpNode.pre];
}while(tmpNode.pre!=-1);
break;
}
for(int i=0;i<4;i++){
int x=tmpNode.x+dx[i],y=tmpNode.y+dy[i];
//判断是不是越界,和这个点使用过没有
if(x<0||x>=m||y<0||y>=n||mp[x][y]==1)continue;
Node tmp;
tmp.x=x,tmp.y=y,tmp.pre=tmpNode.loc,tmp.loc=res;
nodes[res++]=tmp;
que.push(tmp);
}
}
return 0;
}
测试数据