[μ½λνΈλ¦¬] BFS νμ / κ° μ μλ κ³³λ€
κ° μ μλ κ³³λ€
μ«μ 0, 1λ‘λ§ μ΄λ£¨μ΄μ§ n * n 격μκ° μ£Όμ΄μ‘μ λ, kκ°μ μμμ μΌλ‘λΆν° μνμ’μ° μΈμ ν κ³³μΌλ‘λ§ μ΄λνμ¬ λλ¬ κ°λ₯ν μΉΈμ μλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±ν΄λ³΄μΈμ. μ«μ 0μ ν΄λΉ μΉΈμ΄ μ΄λν μ μλ κ³³μμ, μ«μ 1μ ν΄λΉ μΉΈμ΄ μ΄λν μ μλ κ³³μμ μλ―Έν©λλ€.
μ λ ₯ νμ
첫 λ²μ§Έ μ€μλ 격μμ ν¬κΈ°λ₯Ό λνλ΄λ nκ³Ό μμμ μ μλ₯Ό λνλ΄λ k κ°μ΄ 곡백μ μ¬μ΄μ λκ³ μ£Όμ΄μ§λλ€.
λ λ²μ§Έ μ€ λΆν°λ nκ°μ μ€μ κ±Έμ³ κ° νμ ν΄λΉνλ nκ°μ μ«μκ° μμλλ‘ κ³΅λ°±μ μ¬μ΄μ λκ³ μ£Όμ΄μ§λλ€.
κ·Έ λ€μ μ€ λΆν°λ kκ°μ μ€μ κ±Έμ³ κ° μμμ μ μμΉ (r, c)κ° κ³΅λ°±μ μ¬μ΄μ λκ³ μ£Όμ΄μ§λλ€. (r, c)λ rν cμ΄ μμΉκ° μμμ μ€ νλμμ μλ―Έν©λλ€. λͺ¨λ μμμ μ μμΉμ μ νμλ μ«μλ 0μ΄κ³ , μμμ λΌλ¦¬ μλ‘ κ²ΉμΉμ§ μκ² μ£Όμ΄μ§λ€κ³ κ°μ ν΄λ μ’μ΅λλ€. (1 ≤ r ≤ n, 1 ≤ c ≤ n)
- 1 ≤ n ≤ 100
- 1 ≤ k ≤ n * n
μΆλ ₯ νμ
μμμ§μ μΌλ‘λΆν° λ°©λ¬Έμ΄ κ°λ₯ν μλ‘ λ€λ₯Έ μΉΈμ μλ₯Ό μΆλ ₯ν©λλ€.
λμ νμ΄
#include <iostream>
#include <queue>
using namespace std;
int n; int k;
int mat[101][101]={0,};
int visited[101][101] = {0,};
int cnt=0;
bool CanGo(int r, int c){
if(r>n || c>n || r<1 || c<1) return false;
if(visited[r][c]==1) return false;
if(mat[r][c]==1) return false;
return true;
}
int bfs(int r, int c){
int dx[4] = {1,0,-1,0};
int dy[4] = {0,1,0,-1};
queue<pair<int,int> > q;
q.push(make_pair(r,c));
if(visited[r][c]==0) cnt++;
visited[r][c]=1;
while(!q.empty()){
pair<int,int> a = q.front(); // μ¬κΈ°μ νμ 첫 pairλ₯Ό μ μ₯ν΄λκ³
q.pop();
for(int i=0; i<4; ++i){
int nr = a.first +dx[i]; // 첫 pairμλ κ°μμ μ΄λμμΌμΌν¨.!!
int nc = a.second +dy[i];
if(CanGo(nr, nc)){
q.push(make_pair(nr,nc));
visited[nr][nc] = 1;
cnt++;
}
}
}
}
int main() {
cin >> n>>k;
for(int i=1; i<=n; ++i){
for(int j=1; j<=n; ++j) cin>>mat[i][j];
}
int r; int c;
for(int i=0; i<k; ++i){
cin>>r>>c;
bfs(r, c);
}
cout << cnt;
return 0;
}
ν΄μ€ μλ³΄κ³ νμ΄λλ°