题目描述
地图显示,法阵是方形的,纵横皆为五里,在地图上简示为5*5的矩阵,且只由0或1组成。其中,0表示可以走的路,1表示阻止通行的屏障。左上角和右下角分别是阵的入口和出口,这两个位置的数字保证为0。
既然得到了地图,破解法阵自然不再是难事。现在,小胖不仅想要走出法阵,还想知道怎样才能用最短的路线走出法阵。
input
输入是一个5 × 5的二维数组,仅由0、1两数字组成,表示法阵地图。
output
输出若干行,表示从左上角到右下角的最短路径依次经过的坐标,格式如样例所示。数据保证有唯一解。
题目讲解
很明显,这道题需要使用到广度优先搜索(BFS)来找到一条最短路径,唯一需要注意的一点是题目要求输出这条路径,而不是这条路径的长度,所以我们可以采用一个结构体数组 parent[N][N] 来保存所走路径中每一个点的前一个点。
这样的话,如果我们按题目来从起点到终点,那么要输出路径的则需要反向输出,所以为了方便起见,我们从终点开始搜索,搜索到起点,这样我们就可以直接得到正确的路径
源代码(可AC)
#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
int g[7][7];
int visit[7][7];
struct Point
{
int x;
int y;
Point(){
};//无参数的构造函数
Point(int _x,int _y):x(_x),y(_y){
};//函数参数的构造函数
};
Point parent[7][7];
bool bfs(Point &pb,Point &pe)
{
queue<Point> que