배추가 있는 곳을 배열로 저장했고, 배추가 있는 곳을 찾아다니면서 dfs를 돌렸다. map에 배추가 있는 곳을 1로 표시했는데 방문하면 2로 바꿔서 다시 방문하지 않도록 했다. 자꾸 이상하게 나와서 뭐지 했는데 2를 대입해야되는데 ==표시로 하고있었다;; 하......시간날림
#include<iostream>
using namespace std;
int map[50][50];
int dx[] = {1,0,0,-1};
int dy[] = {0,1,-1,0};
void dfs(int x, int y, int r, int c) {
for (int i = 0; i < 4; i++) {
int next_x = x + dx[i];
int next_y = y + dy[i];
if (next_x < 0 || next_x >= r || next_y < 0 || next_y >= c) continue;
if (map[next_x][next_y] == 1) {
map[next_x][next_y] = 2; //방문하고 안으로 깊이 들어간다.
dfs(next_x, next_y, r, c);
}
}
}
int main() {
int T;
cin >> T;
for (int i=0; i < T; i++) {
int r, c;
int K;
cin >> r >> c >> K;
//map초기화
for (int j = 0; j < r; j++) {
for (int k = 0; k < c; k++) {
map[j][k] = 0;
}
}
pair<int, int> cab[2500];
for (int j = 0; j < K; j++){
cin >> cab[j].first >> cab[j].second;
map[cab[j].first][cab[j].second] = 1;
}
int cnt = 0;
for (int j = 0; j < K; j++) {
if (map[cab[j].first][cab[j].second] == 1) {
cnt++;
map[cab[j].first][cab[j].second] = 2;
dfs(cab[j].first, cab[j].second, r, c);
}
}
cout << cnt << endl;
}
return 0;
}
'Programming > BOJ' 카테고리의 다른 글
[백준/C++] 백준 2309번: 일곱 난쟁이 (0) | 2020.08.04 |
---|---|
[백준/C++] 백준 2178번: 미로탐색 (BFS) (0) | 2020.08.02 |
[백준/C++] 백준 1946번: 신입 사원 (2) | 2020.07.30 |
[백준/C++] 백준 1987번: 알파벳 (0) | 2020.07.28 |
[백준/C++] 백준 1759번 : 암호만들기 (0) | 2020.07.28 |