https://www.acmicpc.net/problem/2589
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
queue <int> qx;
queue <int> qy;
int height, width, i, j, map[51][51], len[51][51], mx, fx[4] = {0,1,0,-1}, fy[4] = { -1,0,1,0 },tmpX,tmpY,x,y;
bool visited[51][51];
char alpha;
void bfs(int i, int j){
visited[i][j] = true;
qx.push(i); qy.push(j);
while (!qx.empty() && !qy.empty()) {
tmpX = qx.front(); qx.pop();
tmpY = qy.front(); qy.pop();
for (i = 0; i < 4; i++) {
x = tmpX + fx[i];// (tmpX, tmpY) 동서남북 탐색
y = tmpY + fy[i];
if (map[x][y] == 1 && !visited[x][y]) { //방문하지 않은 육지이면
visited[x][y] = true;
qx.push(x); qy.push(y);
len[x][y] = len[tmpX][tmpY] + 1; //길이 하나 늘림
if (len[x][y] > mx) mx = len[x][y];
}
}
}
}
int main() {
scanf_s("%d %d", &height, &width);
for (i = 0; i < height; i++) {
getchar();// 개행시 버퍼에 있는 \n을 없애기 위함.
for (j = 0; j < width; j++) {
alpha = getchar(); //한 문자씩 받아서
printf("%d ", alpha);
if (alpha == 'L') { //육지면 map 배열에 1 저장
map[i][j] = 1;
}
else map[i][j] = 0; //바다면 0 저장
}
}
for (i = 0; i < height; i++) { // 모든 지점 탐색
for (j = 0; j < width; j++) {
if (map[i][j] == 1) {
bfs(i, j);
memset(len, 0, sizeof(len));
memset(visited, 0, sizeof(visited));
}
}
}
printf("%d\n", mx);
return 0;
}
'알고리즘 문제' 카테고리의 다른 글
프로그래머스 완주하지 못한 선수 (0) | 2018.09.29 |
---|---|
14888번 연산자 끼워넣기 백준 BOJ (0) | 2018.04.14 |
Programmers Level 8 올바른 괄호 (카탈린 수 사용) (0) | 2018.01.28 |
Programmers Level 8 선입선출 스케줄링 (1) | 2018.01.28 |
Programmers Level 6 3xN 타일링 (0) | 2018.01.28 |