문제
https://www.acmicpc.net/problem/14716
14716번: 현수막
혁진이의 생각대로 프로그램을 구현했을 때, 현수막에서 글자의 개수가 몇 개인지 출력하여라.
www.acmicpc.net
주안점
기본적인 BFS에서 사용하는 상,하,좌,우 에다가 대각선이 포함된 이동을 한다.
구조
BFS를 통하여 Visited로 확인하며 몇번 BFS를 돌았는지 확인
코드
#include<bits/stdc++.h>
using namespace std;
int row,col,ret,y,x;
int a[254][254], visited[254][254];
queue<pair<int,int>> q;
int dy[8] = {-1,0,1,0,-1,1,1,-1};
int dx[8] = {0,1,0,-1,1,1,-1,-1};
int main() {
cin>>row>>col;
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
cin>>a[i][j];
}
}
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
if(a[i][j]==1 && visited[i][j]==0){
ret++;
visited[i][j] = 1;
q.push({i,j});
while(q.size()){
tie(y,x) = q.front(); q.pop();
for(int k=0; k<8; k++){
int ny = y+dy[k];
int nx = x+dx[k];
if(ny>=row || nx>=col || nx<0 || ny<0) continue;
if(visited[ny][nx]==1 || a[ny][nx]==0) continue;
visited[ny][nx] = 1;
q.push({ny,nx});
}
}
}
}
}
cout<<ret<<"\n";
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1717번 : 집합의 표현 (0) | 2021.12.22 |
---|---|
[백준] 2292번 : 벌집 (0) | 2021.12.01 |
[백준] 2636번 : 치즈 (0) | 2021.11.09 |
[백준] 회의실 배정 (0) | 2021.11.04 |
[백준] 부녀회장이 될테야 (0) | 2021.11.03 |