Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

혼종 꼬지마루

[백준] 3109 - 빵집 본문

Algorithms/DFS

[백준] 3109 - 빵집

꼬지마루 2018. 9. 17. 21:22

BFS로 풀려다가 메모리초과랑 런타임이 오지게 난 문제


원래 아이디어는 BFS로 탐색 후 도착하면 그 경로를 역추적하여 마킹하는 과정을 전부 돌아봐주는 방법


map과 큐, check와 경로를 저장하는 배열까지 만들었으니 메모리가 초과날만 한듯


DFS로 풀기 두려웠던 것은 시간초과가 날 것 같다는 생각에 BFS로 했던 것인데 메모리라니...


결국 DFS로 풀었다


1. 시작점을 돌면서 DFS 탐색 시작


2. 갈 수 있는 위치면 체크하고 들어간다


3. 도착했다면 리턴하며 1을 반환


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
#include <iostream>
#include <memory.h>
#define MX 10005
using namespace std;
 
char map[MX][503];
int check[MX][503];
int dx[] = { 11};
int dy[] = { -10};
int R, C, dab;
 
int dfs(int x, int y)
{
    map[y][x] = 'x';
    if (x == C - 1return 1;
    for (int i = 0; i < 3; i++)
    {
        int nx = x + dx[i], ny = y + dy[i];
        if (nx < || ny < || nx >= C || ny >= R || map[ny][nx] == 'x'continue;
        if (dfs(nx, ny)) return 1;
    }
    return 0;
}
 
int main(void)
{
    cin >> R >> C;
    for (int i = 0; i < R; i++)
        cin >> map[i];
    for (int i = 0; i < R; i++)
        dab += dfs(0, i);
    cout << dab << '\n';
    return 0;
}
cs

'Algorithms > DFS' 카테고리의 다른 글

[백준] 17406 - 배열 돌리기4  (0) 2019.08.18
[백준] 17300 - 패턴  (0) 2019.07.21
[백준] 3967 - 매직스타  (0) 2018.09.14
[SWEA] 4223 - 삼성이의 트라우마  (0) 2018.09.08
[백준] 14889 - 스타트와 링크  (0) 2018.09.07