#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; vector > dy = { { 2 ,2,-2,-2, 1, 1,-1,-1}, { 1, 1,-1,-1} }; vector > dx = { { 1,-1, 1,-1, 2,-2, 2,-2}, { 1,-1, 1,-1} }; int main() { int h, w; cin >> h >> w; vector s(h, string(w, ' ')); int sy, sx, gy, gx; for(int y=0; y> s[y][x]; if(s[y][x] == 'S'){ sy = y; sx = x; } else if(s[y][x] == 'G'){ gy = y; gx = x; } } } vector > > check(2, vector >(h, vector(w, false))); queue > q; check[0][sy][sx] = true; q.push(make_tuple(0, sy, sx)); int ans = 0; while(!q.empty()){ int n = q.size(); while(--n >= 0){ int a, y, x; tie(a, y, x) = q.front(); q.pop(); if(y == gy && x == gx){ cout << ans << endl; return 0; } for(unsigned i=0; i