๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[๋ฐฑ์ค€]2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

by syLim___ 2023. 2. 15.
728x90

https://www.acmicpc.net/problem/2667

 

2667๋ฒˆ: ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ์ง€๋„๊ฐ€ ์žˆ๋‹ค. 1์€ ์ง‘์ด ์žˆ๋Š” ๊ณณ์„, 0์€ ์ง‘์ด ์—†๋Š” ๊ณณ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฒ ์ˆ˜๋Š” ์ด ์ง€๋„๋ฅผ ๊ฐ€์ง€๊ณ  ์—ฐ๊ฒฐ๋œ ์ง‘์˜ ๋ชจ์ž„์ธ ๋‹จ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ๋‹จ์ง€์— ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด๋ ค ํ•œ๋‹ค. ์—ฌ

www.acmicpc.net

 

bfs๋กœ ํ’€์—ˆ์Œ

์ฝ”๋“œ๊ฐ€ ์•ฝ๊ฐ„ ์ง€์ €๋ถ„ํ•œ ๋А๋‚Œ์ด๋‹ค,,

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>

using namespace std;

int n;
int map[25][25]; //์ง€๋„ 
bool visited[25][25]; //๋ฐฉ๋ฌธ ์ฒดํฌ 
queue<pair<int,int>> q;
int cnt=0; //๋‹จ์ง€๋ณ„ ์ง‘์˜ ๊ฐœ์ˆ˜ count 
vector<int> v; //๋‹จ์ง€๋ณ„ ์ง‘์˜ ๊ฐœ์ˆ˜ ์ €์žฅ 

int bfs(int x, int y){	
	visited[x][y]=true;
	q.push(make_pair(x,y));
	cnt++;
	while(!q.empty()){
		int a=q.front().first;
		int b=q.front().second;
		q.pop();
		
		if(a<n-1 && !visited[a+1][b] && map[a+1][b]==1){
			q.push(make_pair(a+1,b));
			visited[a+1][b]=1;
			cnt++;
		}
		if(a>0 && !visited[a-1][b] && map[a-1][b]==1){
			q.push(make_pair(a-1,b));
			visited[a-1][b]=1;
			cnt++;
		}

		if(b<n-1 && !visited[a][b+1] && map[a][b+1]==1){
			q.push(make_pair(a,b+1));
			visited[a][b+1]=1;
			cnt++;
		}
		if(b>0 && !visited[a][b-1] && map[a][b-1]==1){
			q.push(make_pair(a,b-1));
			visited[a][b-1]=1;
			cnt++;
		}

	}
	return cnt;
}

int main(){
	cin>>n;
	for(int i=0;i<n;i++){
		string temp;
		cin>>temp;
		for(int j=0;j<n;j++) map[i][j]=temp[j]-'0';
	}
	
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(!visited[i][j]){
				if(map[i][j]==0) visited[i][j]=1;
				else v.push_back(bfs(i,j));
				cnt=0;
			}
		}
	}

	cout<<v.size()<<"\n";
	sort(v.begin(),v.end());
	for(int i=0;i<v.size();i++) cout<<v[i]<<"\n";
	return 0;
}
728x90