【题意】中文题。。。

【思路】简单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;
}