알고리즘/백준
[백준] 14716번 : 현수막
권택현
2021. 12. 15. 23:49
문제
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";
}