제출 #383267

#제출 시각아이디문제언어결과실행 시간메모리
383267MODDIAwesome Arrowland Adventure (eJOI19_adventure)C++14
50 / 100
11 ms3564 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define vi vector<int> #define vl vector<ll> #define mp make_pair #define pb push_back using namespace std; int n, m; char mat[501][501]; vector<pii> G[25000]; bool in_range(int i, int j){ if(i >= 0 && i < n && j >= 0 && j < m) return true; return false; } void dijkstra(){ int dist[n * m]; for(int i = 0; i < n * m; i++) { dist[i] = 1e9; } priority_queue<pii> pq; pq.push(mp(0,0)); dist[0] = 0; while(!pq.empty()){ pii state = pq.top(); pq.pop(); for(auto next : G[state.second]){ int next_city = next.first, len = next.second; if(dist[next_city] > dist[state.second] + len){ dist[next_city] = dist[state.second] + len; pq.push(mp(-dist[next_city], next_city)); } } } if(dist[(n - 1) * m + m-1] == 1e9) cout<<-1<<endl; else cout<<dist[(n - 1) * m + m-1]<<endl; } int main(){ cin>>n>>m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin>>mat[i][j]; } } for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(mat[i][j]=='X') continue; else if(mat[i][j]=='N'){ if(in_range(i - 1, j)) G[i * m + j].pb(mp((i-1)*m + j, 0)); if(in_range(i + 1, j)) G[i * m + j].pb(mp((i+1)*m + j, 2)); if(in_range(i, j + 1)) G[i * m + j].pb(mp(i*m + j + 1, 1)); if(in_range(i, j - 1)) G[i * m + j].pb(mp(i*m + j-1, 3)); } else if(mat[i][j]=='E'){ if(in_range(i - 1, j)) G[i * m + j].pb(mp((i-1)*m + j, 3)); if(in_range(i + 1, j)) G[i * m + j].pb(mp((i+1)*m + j, 1)); if(in_range(i, j + 1)) G[i * m + j].pb(mp(i*m + j+1, 0)); if(in_range(i, j - 1)) G[i * m + j].pb(mp(i*m + j -1, 2)); } else if(mat[i][j]=='S'){ if(in_range(i - 1, j)) G[i * m + j].pb(mp((i-1)*m + j, 2)); if(in_range(i + 1, j)) G[i * m + j].pb(mp((i+1)*m + j, 0)); if(in_range(i, j + 1)) G[i * m + j].pb(mp(i*m + j+1, 3)); if(in_range(i, j - 1)) G[i * m + j].pb(mp(i*m + j-1, 1)); } else if(mat[i][j]=='W'){ if(in_range(i - 1, j)) G[i * m + j].pb(mp((i-1)*m + j, 1)); if(in_range(i + 1, j)) G[i * m + j].pb(mp((i+1)*m + j, 3)); if(in_range(i, j + 1)) G[i * m + j].pb(mp(i*m + j + 1, 2)); if(in_range(i, j - 1)) G[i * m + j].pb(mp(i*m + j-1, 0)); } } } dijkstra(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...