迷宫题这100通过
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<queue>
using namespace std;
struct Point
{
Point(int _x, int _y) :x(_x), y(_y) {};
int x;
int y;
};
int main()
{
int N;
while (cin >> N) {
vector<string> Grid(N);
for (int i = 0; i < N; ++i)
cin >> Grid[i];
vector<vector<int>> PathLength(N, vector<int>(N, -1));
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,1,-1 };
queue<Point> que;
for(int i=0;i<N;++i)
for (int j = 0; j < N; ++j)
{
if (Grid[i][j] == 'S') {
que.push(Point(i, j));
PathLength[i][j] = 0;
}
}
int out = -1;
while (!que.empty()) {
Point p = que.front();
for (int i = 0; i < 4; ++i) {
int nx = (p.x + dx[i]+N) % N;
int ny = (p.y + dy[i]+N) % N;
if (Grid[nx][ny]=='#'||PathLength[nx][ny] != -1)
continue;
que.push(Point(nx, ny));
PathLength[nx][ny] = PathLength[p.x][p.y] + 1;
if(Grid[nx][ny]=='E')
out= PathLength[p.x][p.y] + 1;
}
que.pop();
}
cout << out << endl;
}
}