cgy12306

[백준 BoJ] 2589 - 보물섬 본문

Algorithm/C++

[백준 BoJ] 2589 - 보물섬

cgy12306 2022. 2. 16. 16:46
// https://www.acmicpc.net/problem/2589
// 보물섬

#include<iostream>
#include<queue>
#include<cstring>
#include<algorithm>

using namespace std;
int N, M;
char map[51][51];
int visited[51][51];
int dx[] = { 1, -1, 0, 0 };
int dy[] = { 0, 0, 1, -1 };

int bfs(int x, int y) {
	memset(visited, 0, sizeof(visited));
	queue<pair<int, int>> q;
	q.push({ x, y });
	visited[x][y] = 1;

	while (!q.empty()) {
		x = q.front().first;
		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 || map[nx][ny] =='W') continue;

			if (visited[nx][ny] == 0 ) {
				visited[nx][ny] = visited[x][y] + 1;
				q.push({ nx, ny });
			}
		}
	}
	int Max = 0;
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			Max = max(Max, visited[i][j]);
		}
	}
	return Max - 1;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);

	cin >> N >> M;
	int ans = 0;
	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') {
				ans = max(bfs(i, j), ans);
			}
		}
	}
	cout << ans;
}

'Algorithm > C++' 카테고리의 다른 글

[백준 BoJ] 10868 - 최솟값  (0) 2022.03.04
[백준 BoJ] 10026 - 적록색약  (0) 2022.02.16
[백준 BoJ] 5014 - 스타트링크  (0) 2022.02.16
[백준 BoJ] 1987 - 알파벳  (0) 2022.02.16
[백준 BoJ] 18119 - 단어 암기  (0) 2022.02.14
Comments