Problem Solving/Baekjoon

[백준 / BOJ] 1103 게임

msmn 2021. 7. 9. 21:50
728x90

알고리즘 분류: dp, dfs, bfs

문제 링크: https://www.acmicpc.net/problem/1103

 

1103번: 게임

줄에 보드의 세로 크기 N과 가로 크기 M이 주어진다. 이 값은 모두 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 보드의 상태가 주어진다. 쓰여 있는 숫자는 1부터 9까지의 자연수 또는

www.acmicpc.net

#include <bits/stdc++.h>
#define ll long long
using namespace std;
typedef pair<int, int> pii;
// https://www.acmicpc.net/problem/1103 게임

int r, c;
char board[51][51];
int max_dist[51][51];
int visited[51][51];
const int dx[4] = {-1, 1, 0, 0};
const int dy[4] = {0, 0, -1, 1};

int dfs(int x, int y) {
    if(x<0 || y<0 || x>=r || y>=c || board[x][y] == 'H') return 0;
    if(visited[x][y]) {
        cout << -1;
        exit(0);
    }
    
    int &ret = max_dist[x][y];
    if(ret) return ret;
    visited[x][y] = 1;
    
    for(int dir=0; dir<4; dir++) {
        int nx = x + dx[dir] * (board[x][y] - '0');
        int ny = y + dy[dir] * (board[x][y] - '0');
        ret = max(ret, dfs(nx, ny) + 1);
    }
    
    visited[x][y] = 0;
    return ret;
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    
    cin >> r >> c;
    for(int i=0; i<r; i++) cin >> board[i];
    cout << dfs(0, 0);
    
    return 0;
}

 

 
728x90

'Problem Solving > Baekjoon' 카테고리의 다른 글

[백준 / BOJ] 1039 교환  (0) 2021.07.09
[백준 / BOJ] 1713 후보 추천하기  (0) 2021.07.09
[백준 / BOJ] 1062 가르침  (0) 2021.07.09
[백준 / BOJ] 3055 탈출  (0) 2021.07.08
[백준 / BOJ] 3425 고스택  (0) 2021.07.08