#include <bits/stdc++.h>
#define pb push_back
#define ll long long int
#define pi pair<int, int>
#define all(x) x.begin(), x.end()
#define INF INT_MAX
using namespace std;
int Oduzmi(int a, int b)
{
    if(a>=b) return a-b;
    return 4-b+a;
}
void Dijkstra(vector<vector<pi>>& graf,  vector<int>& distance, vector<bool>& visited)
{
    priority_queue<pi, vector<pi>, greater<pi>> pq;
    pq.push({0, 0});
    while(!pq.empty())
    {
        pi sad=pq.top();
        int cvor=sad.second, dist=sad.first;
        pq.pop();
        if(visited[cvor]) continue;
        visited[cvor]=true;
        for(auto u:graf[cvor])
        {
            int sl=u.second, d=u.first;
            if(d+dist<distance[sl])
            {
                distance[sl]=d+dist;
                pq.push({distance[sl], sl});
            }
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n, m;
    cin>>n>>m;
    vector<vector<int>> mat(n);
    for(int i=0; i<n; i++)
    {
        mat[i].resize(m);
        for(int j=0; j<m; j++)
        {
            char un;
            cin>>un;
            if(un=='N') mat[i][j]=0;
            else if(un=='E') mat[i][j]=1;
            else if(un=='S') mat[i][j]=2;
            else if(un=='W') mat[i][j]=3;
            else mat[i][j]=-1;
        }
    }
    vector<vector<pi>> graf(n*m+5);
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            if(mat[i][j]==-1) continue;
            int ind=i*m+j, gore=(i-1)*m+j, desno=i*m+j+1, dole=(i+1)*m+j, levo=i*m+j-1;
            if(i>0) graf[ind].pb({Oduzmi(0, mat[i][j]), gore});
            if(i<n-1) graf[ind].pb({Oduzmi(2, mat[i][j]), dole});
            if(j>0) graf[ind].pb({Oduzmi(3, mat[i][j]), levo});
            if(j<m-1) graf[ind].pb({Oduzmi(1, mat[i][j]), desno});
        }
    }
    vector<int> distance(n*m, INF);
    vector<bool> visited(n*m, false);
    Dijkstra(graf, distance, visited);
    if(distance[n*m-1]==INF) cout<<-1<<"\n";
    else cout<<distance[n*m-1]<<"\n";
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |