Submission #1355359

#TimeUsernameProblemLanguageResultExecution timeMemory
1355359JungPSKraljica (COCI25_kraljica)C++20
32 / 110
413 ms171956 KiB
#include<bits/stdc++.h>
using namespace std;

char arr[1007][1007];
int visited[10][1007][1007];
int sx,sy,ex,ey;
vector<pair<int,int>> dvec={{0,0},{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
signed main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
    int n,m; cin >> n >> m;
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            cin >> arr[i][j];
            if(arr[i][j]=='S') sx=i,sy=j;
            if(arr[i][j]=='E') ex=i,ey=j;
        }
    }
    memset(visited,0x3f,sizeof(visited));
    deque<pair<pair<int,int>,pair<int,int>>> dq;
    dq.push_back({{0,0},{sx,sy}});
    visited[0][sx][sy]=true;
    while(!dq.empty()){
        int dis=dq.front().first.first;
        int dir=dq.front().first.second;
        int px=dq.front().second.first;
        int py=dq.front().second.second;
        if(px==ex && py==ey){
            cout << dis;
            return 0;
        }
        dq.pop_front();
        for(int r=0;r<dvec.size();++r){
            int nx=px+dvec[r].first;
            int ny=py+dvec[r].second;
            if(nx>n || nx<1 || ny>m || ny<1) continue;
            if(arr[nx][ny]=='#') continue;
            if(dir==r){
                if(visited[r][nx][ny]<=dis) continue;
                visited[r][nx][ny]=dis;
                dq.push_front({{dis,r},{nx,ny}});
            }
            else{
                if(visited[r][nx][ny]<=dis+1) continue;
                visited[r][nx][ny]=dis+1;
                dq.push_back({{dis+1,r},{nx,ny}});
            }
        }
    }
    cout << -1;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...