본문 바로가기

알고리즘/BFS

백준 1012번 유기농배추.


#include 
#include 
#include 
using namespace std;

typedef struct {
	int position_x;
	int position_y;
}earth_bug;

int test_case;
int N, M, K;
bool visit[51][51];
int x, y;
int Map[51][51];
int result;
int dirx[4] = { 0,0,-1,1 };
int diry[4] = { 1,-1,0,0 };
queue q;

void Input() {
	scanf("%d", &test_case);
	for (int i = 0; i < test_case; i++) {
		for (int c = 0; c < 51; c++) {
			for (int y = 0; y < 51; y++) {
				Map[c][y] = 0;
				visit[c][y] = 0;
			}
		}
		result = 0;
		
		scanf("%d %d %d", &M, &N, &K);
		for (int j = 0; j < K; j++) {
			scanf("%d %d", &x, &y);
			Map[y][x] = 1;
		}
		for (int j = 0; j < N; j++) {
			for (int u = 0; u < M; u++) {
				if (visit[j][u]) continue;
				visit[j][u] = true;
				if (Map[j][u] == 0) continue;
				q.push({ u,j }); result++;
				while (!q.empty()) {
					int current_x = q.front().position_x;
					int current_y = q.front().position_y;
					q.pop();
					for (int k = 0; k < 4; k++) {
						int next_x = current_x + dirx[k];
						int next_y = current_y + diry[k];
						if (visit[next_y][next_x]) continue;
						visit[next_y][next_x] = true;
						if (next_x < 0 || next_y < 0 || next_x >= M || next_y >= N || Map[next_y][next_x] == 0) continue;
						q.push({next_x, next_y});
					}
				}
			}
		}
		printf("%d\n", result);
	}
}

void Solve() {
	Input();
}

int main(void) {
	Solve();
	return 0;
}

후기 :

맞는데 런타임 에러가 계속 발생하였다. 결국 원인은 x,y 입력값을 잘못 받은거 예제에서도 제대로 나왔으니 이건 찾기가 좀 힘들었다. 런타임 에러는 범위 설정 잘못 !! -> x,y값 확인하자.

또 배열 초기화 Map[51][51]={0,}이 초기화가 끝까지 안되는 문제가 발생하였다. 그리고 초기화를 시켜도 중간에 코드를 볼다 특정값이 변화하는 문제를 파악하였다. 이것때문에 시간 좀 끌었지만..... 노트북을 바꿀때까 온것 같다.....(버그라닛)

'알고리즘 > BFS' 카테고리의 다른 글

백준 17142 연구소 3  (0) 2019.05.18
백준 11403 경로 찾기  (0) 2019.04.23
백준 2667 단지 번호  (0) 2019.04.22
백준 7576 토마토  (0) 2019.04.22