백준백준 2667 단지번호붙이기 (C++)C++왈독2018.10.19 · 조회 109 · 좋아요 0 어디가 틀렸는지 못 찾겠음+) 문제 해결num의 크기가 N*N/2여야함//BJ2667 #include <iostream> #include <algorithm> #include <queue> using namespace std; //꼭 써줘... void BFS(int x, int y, int cnt); int dx[] = {-1, 0, 1, 0}; //위, 오른쪽, 아래, 왼쪽 방향 int dy[] = {0, 1, 0, -1}; int map[26][26] = {0,}; int check[26][26] = {0,}; int num[313] = {0,}; //25*25/2 int N = 0; //5<=N<=25 int main(){ scanf("%d",&N); for(int i = 0; i<N; i++){ for(int j = 0; j<N; j++){ scanf("%1d", &map[i][j]);} //입력 한글자씩 } int cnt = 0; for(int i=0; i<N; i++){ for(int j = 0;j<N; j++){ if(map[i][j]==1&&check[i][j]==0){ BFS(i, j, ++cnt); } else if(check[i][j]==0){ check[i][j] = -1; } } }//for end printf("%d\n", cnt); sort(num,num+cnt); //크기 순서대로 sort for(int i=0; i<cnt;i++){ printf("%d\n",num[i]); } } void BFS(int x, int y, int cnt){ queue<pair<int,int>> q; //q호출 q.push(make_pair(x,y)); check[x][y] = cnt; num[cnt-1]++; while(!q.empty()){ x = q.front().first; //x,y값 초기화 y = q.front().second; q.pop(); for(int k=0; k<4; k++){ int nx = x + dx[k]; int ny = y + dy[k]; if(0<=nx && nx<N && 0<=ny && ny<N){//nx,ny가 범위안에 드는가 if(map[nx][ny]==1&&check[nx][ny]==0){ q.push(make_pair(nx,ny));//nx, ny push check[nx][ny] = cnt; num[cnt-1]++; } else if(check[nx][ny]==0) { check[nx][ny] = -1; //탐색완료 } } }//위아래방향 탐구 끝 } }왈독 왈독님의 창작활동을 응원하고 싶으세요?후원하기 이전글이 없어요.다음글백준 2178 미로탐색 (C++)C++알고리즘 공부구독자 3명0개의 댓글