This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define pii pair<int,int>
#define piii pair<int,pii>
#define fi first
#define se second
#define maxn 505
int n,m,d[maxn][maxn],dist[maxn][maxn];
int dx[]={-1,0,1,0},
dy[]={0,1,0,-1};
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin >> n >> m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char c;cin >> c;dist[i][j]=INT_MAX;
if(c=='N') d[i][j]=0;
else if(c=='E') d[i][j]=1;
else if(c=='S') d[i][j]=2;
else if(c=='W') d[i][j]=3;
else d[i][j]=-1;
}
}
priority_queue<piii,vector<piii>,greater<piii>> pq;
dist[1][1]=0;
pq.push({0,{1,1}});
while(!pq.empty()){
int x=pq.top().se.fi,y=pq.top().se.se,len=pq.top().fi;pq.pop();
if(dist[x][y]!=len) continue;
if(x==n && y==m){
cout << len << '\n';
return 0;
}
if(d[x][y]==-1) continue;
for(int t=0;t<4;t++){
int add=(4+t-d[x][y])%4,xt=x+dx[t],yt=y+dy[t];
if(yt<=0 || xt<=0 || xt>n || yt>m) continue;
if(add+len<dist[xt][yt]){
dist[xt][yt]=add+len;
pq.push({add+len,{xt,yt}});
}
}
}
cout << -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... |