#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 |