반응형
포인트
1. BFS (너비 우선 탐색)을 구현하는 문제입니다
한 구역에 탐색을 BFS로 진행을 합니다. 구역 탐색을 마치고 양의 숫자와 늑대의 숫자를 비교해서
한 친구(양이나 늑대)를 0으로 만들어준 후 결과 값에 더해줍니다.
🧶문서는 항상 수정될 수 있습니다. 비판은 환영합니다.
#include <iostream>
#include <queue>
#include <tuple>
using namespace std;
int n, m;
char map[255][255];
bool visited[255][255];
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
pair<int, int> bfs(int a, int b){
queue<pair<int, int>> q;
q.push({a, b});
visited[a][b] = 1;
int c = 0;
int d = 0;
while(!q.empty()){
int x, y;
tie(x, y) = q.front();
q.pop();
for(int i=0; i<4;i++){
int nx = x+dx[i];
int ny = y+dy[i];
if(nx<0||ny<0||nx>=n||ny>=m) continue;
if(!visited[nx][ny]&&map[nx][ny]!='#') {
if(map[nx][ny]=='v') d+=1;
else if(map[nx][ny]=='k') c+=1;
q.push({nx, ny});
visited[nx][ny] = 1;
}
}
}
if(c>d) d=0;
else c=0;
return {c, d};
}
int main(){
cin>>n>>m;
for(int i=0; i<n; i++){
string s;
cin>>s;
for(int j=0; j<m; j++) map[i][j] = s[j];
}
pair<int, int> answer = {0,0};
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
pair<int, int> a = bfs(i, j);
answer = {answer.first+a.first, answer.second+a.second};
}
}
cout<<answer.first<<" "<<answer.second<<"\n";
}
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘] c++ cpp 연속된 숫자 1개씩 입력 방법 (4) | 2020.12.04 |
---|---|
Gitflow (0) | 2020.12.04 |
[알고리즘] 타겟 넘버 (0) | 2020.12.04 |
[알고리즘] c++ cpp 단어 뒤집기 (0) | 2020.12.03 |
[알고리즘] DFS (깊이 우선 탐색), BFS(너비 우선 탐색) (0) | 2020.12.03 |
댓글