#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector <ll> vi;
typedef pair <ll,ll> pi;
typedef vector <pi> pii;
typedef vector <pii> vii;
#define inf LLONG_MAX
#define F first
#define S second
vii V;
int main () {
ll N,m;
cin>>N>>m;
ll c,e;
V.resize(N*m);
//ll A[4]={N,S,W,E};
for (c=0;c<N;c++) {
for (e=0;e<m;e++) {
char a;
cin>>a;
if (a=='X') continue;
ll b;
if (a=='N') b=0;
if (a=='E') b=1;
if (a=='S') b=2;
if (a=='W') b=3;
ll pos=c*m+e;
if (c>0) {
V[pos].push_back(pi(pos-m, (4-b)%4 ));
}
if (c<N-1) {
V[pos].push_back(pi(pos+m, (6-b)%4) );
}
if (e>0) {
V[pos].push_back(pi(pos-1, (7-b)%4 ));
}
if (e<m-1) {
V[pos].push_back(pi(pos+1, (5-b)%4 ));
}
}
}
//cout<<1<<endl;
priority_queue <pi> Q;
vi dist;
dist.assign(N*m,inf);
Q.push({0,0});
dist[0]=0;
while (!Q.empty()) {
pi p=Q.top();
Q.pop();
ll a=p.S;
ll w=-p.F;
if (w>dist[a]) continue;
for (ll c=0;c<V[a].size();c++) {
pi k=V[a][c];
if (dist[k.F]>k.S+w) {
dist[k.F]=k.S+w;
Q.push({-dist[k.F],k.F});
}
}
}
if (dist[N*m-1]==inf) cout<<-1;
else cout<<dist[N*m-1];
return 0;
}
| # | 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... |