迷宫题这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;
    }
}