题目大意
给你一个5*5的迷宫,0代表通路,1代表墙,找到从迷宫左上角到达右下角的最短路径,并输出路径。
思路
与其他直接输出最短路径的长度不同的是,这道题要求输出最短路径。要输出这个路径,所以就要考虑状态了,每一个状态都应该存储到达这个状态的路径。
对于我来说第一次做这种题难点在于如何存储路径,有两种类似的方法,一种是记录每次通过dx、dy数组移动的i值,二是直接把x、y放入队列中,最后输出队列内元素即可。
AC Code
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
typedef long long ll;
const int maxn=1e5+5;
const int INF=0x3f3f3f3f;
int mp[6][6];
int dx[]= {1,-1,0,0},dy[]= {0,0,1,-1};
struct unt {
int x,y,s;
short l[30];
};
unt bfs() {
queue<unt> q;
unt cur,next;
cur.x=0;
cur.y=0;
cur.s=0;
q.push(cur);
while(!q.empty()){
cur=q.front();
q.pop();
if(cur.x==4&&cur.y==4) return cur;
int xx,yy;
for(int i=0;i<4;i++){
xx=cur.x+dx[