BFS 문제
성분이 L인 모든 인덱스에서 가장 먼 곳인 지점의 좌표와 거리를 구조체에 담아 비교하면 된다.
구조체는 아직 익숙하지 않아서 한 번 더 풀어볼만한 문제다.
코드
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include<stdio.h> #include<iostream> #include<vector> #include<queue> using namespace std; int n, m; char map[51][51]; bool ch[51][51]; bool check[51][51]; int d[51][51]; queue<pair<int,int>>q; int dx[] = { 1,-1,0,0 }; int dy[] = { 0,0,1,-1 }; typedef struct{ int sx; int sy; int gx; int gy; int dist; }DATA; DATA answer; void distance(int i, int j) { int a, b; int maxim = -1; while (!q.empty()) { int x = q.front().first; int y = q.front().second; q.pop(); for (int i = 0; i < 4; i++) { int nx = x + dx[i]; int ny = y + dy[i]; if (nx >= 0 && ny >= 0 && nx < n && ny < m) { if (map[nx][ny] == 'L'&&check[nx][ny] == false) { check[nx][ny] = true; d[nx][ny] = d[x][y] + 1; q.push(make_pair(nx, ny)); if (d[nx][ny] > maxim) { maxim = d[nx][ny]; a = nx; b = ny; } } } } } if (answer.dist < maxim) { answer.sx = i; answer.sy = j; answer.gx = a; answer.gy = b; answer.dist = maxim; } } int main() { //freopen("Text.txt", "r", stdin); answer.dist = -1; cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> map[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (map[i][j] == 'L') { q.push(make_pair(i, j)); distance(i, j); memset(check, false, sizeof(check)); memset(d, 0, sizeof(d)); } } } cout << answer.dist; } | cs |
'BOJ' 카테고리의 다른 글
백준 9019 / DSLR (0) | 2019.01.05 |
---|---|
백준 2573 / 빙산 (0) | 2019.01.04 |
백준 7569 / 토마토 (0) | 2019.01.02 |
백준 13913 / 숨바꼭질 4 (0) | 2019.01.01 |
백준 7562 / 나이트의 이동 (0) | 2019.01.01 |