๐ค๋ฌธ์ ์ดํด
์, ํ, ์ข, ์ฐ, ๋๊ฐ์ 4๋ฐฉํฅ์ผ๋ก ์ธ์ ํ 1์ ํ ๊ธ์๋ก ์ทจ๊ธํ์ฌ ๊ธ์๊ฐ ๋ช๊ฐ ์๋์ง ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๐ฅํ์ด๐ฅ
์ ๋ง ๊ฐ๋จํ BFS ๋ฌธ์ ์ธ๋ฐ ๋ฐฉํฅ์ด 4๊ฐ ๋ ์ถ๊ฐ๋ ๋ฒ์ ์ด๋ค.
๋ฐฉํฅ์ ํํํด์ฃผ๋ dx์ dy๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธํด์ ์ค๋ฅธ์ชฝ, ์ผ์ชฝ, ์์ชฝ, ์๋์ชฝ, ์ค๋ฅธ์ชฝ ์๋, ์ผ์ชฝ ์๋, ์ค๋ฅธ์ชฝ ์, ์ผ์ชฝ ์๋ฅผ ๋ํ๋ด์ฃผ์๋ค.
int dx[8] = { 1, -1, 0 , 0 , 1, -1, 1, -1};
int dy[8] = { 0, 0, 1, -1, 1, -1, -1, 1};
#include <iostream>
#include <queue>
using namespace std;
int m, n;
int map[251][251];
bool visited[251][251];
queue<pair<int,int>> q;
int dx[8] = { 1, -1, 0 , 0 , 1, -1, 1, -1};
int dy[8] = { 0, 0, 1, -1, 1, -1, -1, 1};
bool isValid(int y, int x){
return x >=0 && y >=0 && x < n && y < m && !visited[y][x];
}
void BFS(){
while(!q.empty()){
int y = q.front().first;
int x = q.front().second;
q.pop();
for(int i=0; i < 8; i++){
int mv_y = y + dy[i];
int mv_x = x + dx[i];
if( isValid(mv_y, mv_x) && map[mv_y][mv_x] == 1) {
q.push({mv_y, mv_x});
visited[mv_y][mv_x]= true;
}
}
}
}
int main (){
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
cin >> m >> n;
for(int i=0; i < m; i++){
for(int j=0;j < n; j++){
cin>> map[i][j];
}
}
int cnt =0;
for(int i=0; i < m; i++){
for(int j=0;j < n; j++){
if(map[i][j] == 1 && !visited[i][j] ) {
visited[i][j] = true;
q.push({i, j});
BFS();
cnt++;
}
}
}
cout << cnt;
}
728x90
'๋ฐฑ์ค > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 11057๋ฒ ์ค๋ฅด๋ง ์ (0) | 2022.07.18 |
---|---|
[๋ฐฑ์ค/C++] 1939๋ฒ ์ค๋์ ํ (0) | 2022.07.18 |
[๋ฐฑ์ค/C++] 1149๋ฒ RGB๊ฑฐ๋ฆฌ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 18352 ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (0) | 2022.07.16 |
[๋ฐฑ์ค/C++] 2234๋ฒ ์ฑ๊ณฝ (0) | 2022.07.16 |