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
관리 메뉴

혼종 꼬지마루

[백준] 1261 - 알고스팟 본문

Algorithms/BFS

[백준] 1261 - 알고스팟

꼬지마루 2018. 8. 30. 12:12

BFS에 올리긴 했지만, 다익스트라 문제


벽 부수고 이동하기와 같은 문제인 듯 하지만, 이동거리가 최소가 아닌, 벽을 최소로 부수는 것


1. visit배열을 선언해서 최대값으로 초기화


2. BFS탐색을 하면서 벽이 있는 것을 dis로 계산해서 이동위치가 최소가 되는 지점만 큐에 담는다


3. 도착위치에 있는 visit을 출력


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
50
#include <iostream>
#define MX 102
using namespace std;
 
struct ALGO {
    int x, y;
}q[MX*MX*MX];
 
int map[MX][MX], visit[MX][MX];
int dx[] = { 00-1};
int dy[] = { -110};
int N, M, dab = 987654321;
 
int bfs()
{
    int st, ed, ix, iy, in, nx, ny;
    for (int i = 0; i < M; i++)
        for (int j = 0; j < N; j++)
            visit[i][j] = 987654321;
    st = ed = -1;
    q[++st].x = 0; q[st].y = 0; visit[0][0= 0;
    while (st != ed)
    {
        ix = q[++ed].x; iy = q[ed].y;
        for (int i = 0; i < 4; i++)
        {
            nx = ix + dx[i]; ny = iy + dy[i];
            if (nx < || ny < || nx >= N || ny >= M) continue;
            int dis = visit[iy][ix] + map[ny][nx];
            if (dis < visit[ny][nx]) {
                q[++st].x = nx; q[st].y = ny; visit[ny][nx] = dis;
            }
        }
    }
    return visit[M - 1][N - 1];
}
 
int main(void)
{
    cin >> N >> M;
    for(int i = 0; i<M; i++)
        for (int j = 0; j < N; j++)
        {
            char c;
            cin >> c;
            map[i][j] = c - '0';
        }
    cout << bfs() << endl;
    return 0;
}
cs

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

[백준] 1938 - 통나무 옮기기  (0) 2018.08.30
[백준] 5022 - 연결  (0) 2018.08.30
[백준] 9328 - 열쇠  (0) 2018.08.30
[백준] 5213 - 과외맨  (0) 2018.08.30
[백준] 1967 - 트리의 지름  (0) 2018.08.27