- ์ด ๊ธ์ c++๋ก ํ์ด๋ฅผ ์์ฑํ์์ต๋๋ค.
๋ฌธ์
์์
ํ์ด
- BFS๋ฅผ ํ์ฉํ๋ ๋ฌธ์ ๋ก ๋ฐฐ์ด์ ๋ชจ๋ ์ง์ญ์์ BFS๋ฅผ ์คํํฉ๋๋ค.
- ์ฒ์ BFS์์ ์คํํ์ฌ ํ์ํ์ง ์์ ์ง์ญ์์ ๋ค์ BFS๋ฅผ ์คํํ์ฌ ๊ทธ๋ฆผ์ ๊ฐฏ์๋ฅผ ํ์
ํฉ๋๋ค.
- ๊ทธ๋ฆผ์ ์ต๋ ํฌ๊ธฐ๋ BFS๋ฅผ ์คํํ๋ฉด์ ํ์์ popํ ๊ฐฏ์๋ฅผ ์ธ์ด ๋น๊ตํฉ๋๋ค.
#include<iostream>
#include<queue>
#include<utility>
using namespace std;
int n,m;
int arr[500][500];
bool visit[500][500];
int dir[4][2] = {{0,1},{1,0},{0,-1},{-1,0}};
bool inside(int y,int x){
return 0<=y && y<n && 0<=x && x<m;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>arr[i][j];
}
}
int cnt = 0;
int ans = 0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(arr[i][j] && !visit[i][j] ){
cnt++;
int total = 0;
visit[i][j] = 1;
queue<pair<int,int>> q;
q.push({i,j});
while(!q.empty()){
int y = q.front().first;
int x = q.front().second;
q.pop();
total++;
for(int k=0;k<4;k++){
int dy = y + dir[k][0];
int dx = x+ dir[k][1];
if(inside(dy,dx) && arr[dy][dx] && !visit[dy][dx]){
visit[dy][dx] = 1;
q.push({dy,dx});
}
}
}
ans = max(ans, total);
}
}
}
cout<<cnt<<"\n";
cout<<ans<<"\n";
}
- ์ถ๊ฐ๋ก ๊ถ๊ธํ ์ ์ด๋ ์์ ํ ๋ถ๋ถ ์์ผ๋ฉด ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์ธ์.