이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <iostream>
#include <queue>
#include <tuple>
using namespace std;
int n, m;
string s[500];
bool visited[500][500];
const int mvx[4] = {-1 , 0 , 1 , 0 };
const int mvy[4] = { 0 , 1 , 0 , -1 };
bool valid(int i, int j) {
return i >= 0 && j >= 0 && i < n && j < n && s[i][j];
}
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> s[i];
}
priority_queue<tuple<unsigned int, int, int>, vector<tuple<unsigned int, int, int>>,
greater<tuple<unsigned int, int, int>>> pq;
pq.emplace(0, 0, 0);
int mv;
while (!pq.empty()) {
auto [moves, x, y] = pq.top(); pq.pop();
visited[x][y] = true;
if (s[x][y] == 'X') {
if (x == n - 1 && y == m - 1) {
cout << moves;
return 0;
}
continue;
}
switch (s[x][y]) {
case 'N': mv = 0; break;
case 'E': mv = 1; break;
case 'S': mv = 2; break;
case 'W': mv = 3;
}
for (int i = 0, r, c; i < 4; i++) {
r = x + mvx[i];
c = y + mvy[i];
if (valid(r, c) && !visited[r][c]) {
pq.emplace(moves + (i - mv + 4) % 4, r, c);
}
}
}
cout << -1;
}
컴파일 시 표준 에러 (stderr) 메시지
adventure.cpp: In function 'int main()':
adventure.cpp:27:9: warning: 'mv' may be used uninitialized in this function [-Wmaybe-uninitialized]
27 | int mv;
| ^~| # | 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... |