【题意】中文题。。。
【思路】简单bfs加路径记录。
【AC代码】
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <cstring>
#include <vector>
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int x,y;
node(){}
node(int x,int y):x(x),y(y){}
}ans[30][30];
int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int maze[5][5];
int vis[5][5];
stack<node>S;
void bfs(){
queue<node>qu;
qu.push(node(maze[0][0],maze[0][0]));
vis[0][0]=1;
while(!qu.empty()){
node tmp = qu.front();
qu.pop();
if(tmp.x==4&&tmp.y==4) return ;
for(int i=0; i<4; i++){
int dx = tmp.x+dir[i][0];
int dy = tmp.y+dir[i][1];
if(dx>=0&&dx<5&&dy>=0&&dy<5&&maze[dx][dy]!=1&&!vis[dx][dy]){
ans[dx][dy].x = tmp.x;
ans[dx][dy].y = tmp.y;
qu.push(node(dx,dy));
vis[dx][dy]=1;
}
}
}
}
int main(){
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
scanf("%d",&maze[i][j]);
memset(vis,0,sizeof(vis));
memset(ans,0,sizeof(ans));
bfs();
node tmp=node(4,4);
S.push(tmp);
while(tmp.x||tmp.y){
int x = tmp.x;
int y = tmp.y;
tmp.x = ans[x][y].x;
tmp.y = ans[x][y].y;
S.push(tmp);
}
while(!S.empty()){
tmp = S.top();
S.pop();
printf("(%d, %d)\n",tmp.x,tmp.y);
}
return 0;
}