티스토리 뷰

#include <stdio.h>

typedef struct N {
	int x, y, z;	
}N;

int main(void) {
	int V[4] = {-1, 0, 1, 0};
	int H[4] = {0, 1, 0, -1};
	int n, m, ans=0;
	scanf("%d %d", &n, &m);
	
	int map[n][m];
	
	for(int i=0; i<n; i++) { //map 입력 받기
		char str[m];
		scanf("%s", str);
		for(int j=0; j<m; j++) {
			map[i][j] = str[j];
		}
	}
	
	int head = 0, tail = 0; //요소가 나올 인덱스, 요소가 들어갈 인덱스
	N q[2600]; //크게 잡아줍니다. 큐
	
	for(int i=0; i<n; i++) { //각각의 위치에서
		for(int j=0; j<m; j++) {
			if(map[i][j] == 'L') { //땅 일 경우 BFS
                head = tail = 0;
				N tmp = {i, j, 0};
				char v[50][50]={}; //방문확인을 위한 배열
				v[i][j]=1; //처음 위치를 방문 처리
				q[tail++] = tmp; //큐에 삽입
				while(head < tail) { //BFS
					int x = q[head].x;
					int y = q[head].y;
					int z = q[head].z;
					++head;
					
					ans = (ans > z) ? ans : z;
					z++;
					
					for(int k=0; k<4; k++) {
						x += V[k];
						y += H[k];
						if(x>=0 && y>=0 && x<n && y<m && map[x][y] == 'L' && v[x][y]==0) {
							v[x][y] = 1;
							N tmp2 = {x, y, z};
							q[tail++] = tmp2;
						}
						x -= V[k];
						y -= H[k];
					}
				}
			}
		}
	} printf("%d", ans);
}

풀이 : BFS (DFS로도 가능합니다)

 

크기가 50x50 이 한계이다보니 BFS을 위한 큐를 포인터를 이용하지 않고 배열 큐만으로도 가능합니다.

 

https://www.acmicpc.net/problem/2589

 

2589번: 보물섬

보물섬 지도를 발견한 후크 선장은 보물을 찾아나섰다. 보물섬 지도는 아래 그림과 같이 직사각형 모양이며 여러 칸으로 나뉘어져 있다. 각 칸은 육지(L)나 바다(W)로 표시되어 있다. 이 지도에서

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   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
글 보관함