반응형

www.acmicpc.net/problem/16929

 

16929번: Two Dots

첫째 줄에 게임판의 크기 N, M이 주어진다. 둘째 줄부터 N개의 줄에 게임판의 상태가 주어진다. 게임판은 모두 점으로 가득차 있고, 게임판의 상태는 점의 색을 의미한다. 점의 색은 알파벳 대문

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#define rep(i,n) for(int i=0;i<n;i++)
using namespace std;
int n, m;
int dx[] = { -1100 };
int dy[] = { 00-11 };
int visited[50][50];
char arr[50][50];
void dfs(int x, int y, char c, int ban_direc) {
    // 방문한 곳 또 방문했으면 성공
    if (visited[x][y]) {
        cout << "Yes";
        exit(0);
    }
    visited[x][y] = 1;
 
    rep(i, 4) {
        // 반대 방향으로 못 가도록 설정
        if (i == ban_direc) continue;
 
        int nx = x + dx[i];
        int ny = y + dy[i];
        if (nx >= 0 && nx < n && ny >= 0 && ny < m && c == arr[nx][ny]) {
            // 이동하면 안되는 방향 설정 (현재와 반대 방향)
            int ban = 0;
            if (i == 0) ban = 1;
            else if (i == 1) ban = 0;
            else if (i == 2) ban = 3;
            else if (i == 3) ban = 2;
            dfs(nx, ny, arr[nx][ny], ban);
        }
    }
}
int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m;
    rep(i, n) {
        rep(j, m)
            cin >> arr[i][j];
    }
    rep(i, n) {
        rep(j, m) {
            if (!visited[i][j])
                dfs(i, j, arr[i][j], 0);    // (row, col, 현재문자, 이동 금지 방향)
        }
    }
    cout << "No";
}
cs
반응형

'백준 > DFS, BFS' 카테고리의 다른 글

백준 12946 [복습 필수]  (0) 2021.03.11
백준 16940 [복습 필수]  (0) 2021.03.10
백준 16947 [복습 필수]  (0) 2021.03.06
백준 16197  (0) 2021.02.23
백준 13549  (0) 2021.02.19

+ Recent posts