DFS 할 때 더 깔끔하게 풀기
int dx[4] = { 1, -1, 0, 0 };
int dy[4] = { 0, 0, 1, -1 };
vector <int> vec;
void DFS(int x, int y) {
house_cnt++;
visit[x][y] = true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (nx < 0 || nx >= N || ny < 0 || ny >= N) continue;
if (arr[nx][ny] == 1 && visit[nx][ny] == false){
DFS(nx, ny);
}
}
}
이런식으로 dx dy 나눠서 하면 더 깔끔해 보인다.
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
int arr[25][25];
bool visted[25][25];
int num;
int count1 = 0;
void check(int x, int y) {
if (!visted[x][y]&&arr[x][y]==1) {
visted[x][y] = true;
count1++;
if (x >=1)check(x - 1, y);
if (y >=1)check(x, y - 1);
if (x + 1 < num)check(x + 1, y);
if (y + 1 < num)check(x, y + 1);
}
else return;
}
int main() {
cin >> num;
for (int i = 0; i < num; i++) {
string temp;
cin >> temp;
for (int j = 0; j < num; j++) arr[i][j] = temp[j] - '0';
}
vector<int>s;
int max = 0;
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (arr[i][j] == 1&&visted[i][j]!=1) {
check(i, j);
s.push_back(count1);
max++;
count1 = 0;
}
}
}
cout << max << endl;
sort(s.begin(), s.end());
for (auto a : s)
cout << a;
}
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 1149번 문제풀이 (0) | 2021.05.02 |
---|---|
[C++] 백준 1167 번 문제풀이 (0) | 2021.04.06 |
[C++] 백준 2579번 문제풀이++] 백준 2579번 문제풀이 (0) | 2021.03.20 |
[C++] 백준 18870 번 문제풀이 (0) | 2021.03.02 |
[C++] 백준 11726번 문제풀이 (0) | 2021.02.22 |