- 先上题
输入
输入包含多组测试数据。输入的第一行是一个整数T,表示有T组测试数据。
每组输入的第一行是两个整数N和M(1<=N,M<=100)。
接下来N行,每行输入M个字符,每个字符表示迷宫中的一个小方格。
字符的含义如下:
‘S’:起点
‘E’:终点
‘-’:空地,可以通过
‘#’:障碍,无法通过
输入数据保证有且仅有一个起点和终点。
输出
输出
对于每组输入,输出从起点到终点的最短路程,如果不存在从起点到终点的路,则输出-1。
样例
输入
输出
9
题解思路&图解
起初感觉用栈跟队列做都可以,后来细究才发现问题!
- 这里假设我们寻路的方向是上右下左
栈图解
按寻路顺序依次访问,如果符合条件就入栈
代码
#include<bits/stdc++.h>
#define ll long long
#define mst(a) memset(a,0,sizeof(a))
using namespace std;
char mapp[105][105];
//char test[5][5] = { {'S','-','#','#','#'},{'-','-','-','-','-'},{'#','#','-','-','-',},{'E','#','-','-','-',},{'-','-','-','#','#',} };
int dex[4] = {
-1,0,1,0 };
int dey[4] = {
0,1,0,-1 };
int book[105][105] = {
0 };
typedef struct
{
int x, y, step;
}Position;
void maze(Position start, Position end, int n, int m) {
stack<Position> mystack;
start.step = 0;
mystack.push(start);
book[start.x][start.y] = 1;
Position temp = start;
while (!mystack.empty())
{
Position temp2 = mystack.