站外题求助
查看原帖
站外题求助
760018
蟋蟀喵~~STLlover楼主2024/4/20 22:52

题目描述

#include <bits/stdc++.h>
using namespace std;
int n,m,v[4000][4000],c[4] = {-1,1,0,0},d[4] = {0,0,-1,1},sx,sy,ex,ey;
char a[4000][4000];
struct _{
    int x,y,st;
};
queue <_> q;
int main(){
    cin >> n >> m;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            cin >> a[i][j];
            if(a[i][j] == 'S'){
                sx = i,sy = j;
                a[i][j] = '.';
            }
            if(a[i][j] == 'G'){
                ex = i,ey = j;
                a[i][j] = '.';
            }
        }
    }
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            if(a[i][j] == 'v'){
                for(int k = i + 1; k <= n; k++){
                    if(a[k][j] != '.'){
                        break;
                    }
                    a[k][j] = '#';
                }
            }else if(a[i][j] == '^'){
                for(int k = i - 1; k; k--){
                    if(a[k][j] != '.'){
                        break;
                    }
                    a[k][j] = '#';
                }
            }else if(a[i][j] == '<'){
                for(int k = j - 1; k; k--){
                    if(a[i][k] != '.'){
                        break;
                    }
                    a[i][k] = '#';
                }
            }else if(a[i][j] == '>'){
                for(int k = j + 1; k <= m; k++){
                    if(a[i][k] != '.'){
                        break;
                    }
                    a[i][k] = '#';
                }
            }
        }
    }
    if(sx == 0 || sy == 0 || ex == 0 || ey == 0 || a[sx][sy] == '#' || a[ex][ey] == '#'){
        cout << -1;
        return 0;
    }
    q.push({ex,ey,0});
    v[ex][ey] = 1;
    while(q.size()){
        _ __ = q.front();
        q.pop();
        for(int i = 0; i < 4; i++){
            int nx = __.x + c[i],ny = __.y + d[i];
            if(nx > 0 && nx <= n && ny > 0 && ny <= m && !v[nx][ny] && (a[nx][ny] == '.' || a[nx][ny] == 'G')){
                v[nx][ny] = 1;
                q.push({nx,ny,__.st + 1});
                if(nx == sx && ny == sy){
                    cout << q.back().st;
                    return 0;
                }
            }
        }
    }
    cout << -1;
    return 0;
}

WA90分,一个该输出-1的点输出了一个正整数

2024/4/20 22:52
加载中...