728x90
전형적인 BFS 문제이다.
L 에 해당하는 지역만 탐색하게 하면서, 거리 배열을 따로 만들어둬서, 새 지역으로 이동할때 마다 거리를 갱신해주고, 최대 거리 값을 구하면 되는 문제다.
- c++
#include <bits/stdc++.h>
#define MAX 51
using namespace std;
char adj[MAX][MAX];
bool visited[MAX][MAX];
int depth[MAX][MAX]; // 거리 계산을 위한 배열
int L, W, answer;
int dy[4] = {-1, 1, 0, 0};
int dx[4] = {0, 0, -1, 1};
void bfs(int i, int j) {
queue<pair<int, int>> q;
visited[i][j] = true;
q.push({i, j});
while(!q.empty()) {
int y = q.front().first, x = q.front().second;
q.pop();
for (int i = 0; i < 4; ++i) {
int ny = y + dy[i], nx = x + dx[i];
if (ny < 0 || ny > L || nx < 0 || nx > W) continue;
if (adj[ny][nx] == 'L' && !visited[ny][nx]) {
visited[ny][nx] = true;
q.push({ny, nx});
depth[ny][nx] = depth[y][x] + 1;
answer = max(answer, depth[ny][nx]);
}
}
}
}
int main() {
cin.tie(0); ios_base::sync_with_stdio(0);
cin >> L >> W;
char temp;
for (int i = 1; i <= L; ++i) {
for (int j = 1; j <= W; ++j) {
cin >> temp;
adj[i][j] = temp;
}
}
for (int i = 1; i <= L; ++i) {
for (int j = 1; j <= W; ++j) {
if (adj[i][j] == 'L') {
bfs(i, j);
memset(visited, false, sizeof(visited));
memset(depth, 0, sizeof(depth));
}
}
}
cout << answer;
return 0;
}
|
cs |
728x90
'PS' 카테고리의 다른 글
BOJ 16562 - 친구비 (0) | 2021.02.12 |
---|---|
BOJ 2933 - 미네랄 (0) | 2021.02.07 |
BOJ 17298 - 오큰수 (0) | 2021.02.07 |
BOJ 2075 - N번째 큰 수 (0) | 2021.02.05 |
BOJ 9328 - 열쇠 (0) | 2021.02.05 |