답안 #679237

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
679237 2023-01-07T20:33:05 Z GordonRemzi007 Awesome Arrowland Adventure (eJOI19_adventure) C++17
0 / 100
4 ms 468 KB
#include <iostream>
#include <algorithm>
#include <set>
#include <utility>
#include <vector>
#include <climits>

using namespace std;

int trans(char ch) {
    switch(ch) {
        case 'N':
            return 0;
        case 'E':
            return 1;
        case 'S':
            return 2;
        case 'W':
            return 3;
        default:
            return -1;
    }
}
int dis(int from, int to) {
    if(from <= to) return to-from;
    else return 4-from+to;
}
int res = INT_MAX;
int n, m;
bool ok = true;
void traverse(set<pair<int,int>> visited, pair<int,int> loc, int ans, vector<vector<int>>& map) {
    cout << loc.first << " " <<loc.second << endl;
    if(loc.first == n-1 && loc.second == m-1) {
        res = min(res, ans);
        return;
    }
    visited.insert(loc);
    for(int i = 0; i < 4; i++) {
        pair<int,int> nu = loc;
        switch(i) {
            case 0:
                nu.first--;
                break;
            case 1:
                nu.second++;
                break;
            case 2:
                nu.first++;
                break;
            case 3:
                nu.second--;
                break;
        }
        if(nu.first > -1 && nu.second > -1 && nu.first < n && nu.second < m && visited.find(nu) == visited.end()) traverse(visited, nu, ans+dis(map[loc.first][loc.second], i), map);
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m;
    string temp;
    vector<vector<int>> map(n, vector<int>(m));
    set<pair<int,int>> visited;
    for(int i = 0; i < n; i++) {
        cin >> temp;
        for(int j = 0; j < m; j++) {
            if(i == n-1 && j == m-1) continue;
            if(temp[j] == 'X') visited.insert(make_pair(i, j));
            map[i][j] = trans(temp[j]);
        }
    }
    if(visited.find(make_pair(0,0)) == visited.end()) traverse(visited, make_pair(0, 0), 0, map);
    if(res == INT_MAX) cout << "-1\n";
    else cout << res << "\n";
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 468 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB Output isn't correct
2 Halted 0 ms 0 KB -