[BOJ/C+]#2267単番号
https://www.acmicpc.net/problem/2667
😇 BFSで解決した理由は...どうして帰らないのか、私は苦労したのに、Qからポップが漏れて、カチカチ
これは簡単なBFS/DFS問題である.
char型として入力し、アクセス配列を使用します.
😇 BFSで解決した理由は...どうして帰らないのか、私は苦労したのに、Qからポップが漏れて、カチカチ
問題を解く
これは簡単なBFS/DFS問題である.
char型として入力し、アクセス配列を使用します.
BFS
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
#define MAX 25
char map[MAX+1][MAX+1];
bool visited[MAX+1][MAX+1];
int N;
vector<int> res;
int dr[4]={-1,0,1,0};
int dc[4]={0,1,0,-1};
void bfs(int r,int c){
int cnt=0;
queue<pair<int,int>> q;
visited[r][c]=true;
q.push(make_pair(r,c));
cnt++;
while(!q.empty()){
int cr=q.front().first;
int cc=q.front().second;
// 빼먹지 말기 🦧
q.pop();
for(int d=0;d<4;d++){
int nr=cr+dr[d];
int nc=cc+dc[d];
if(nr<0||nr>N-1||nc<0||nc>N-1||map[nr][nc]!='1'||visited[nr][nc]) continue;
visited[nr][nc]=true;
q.push(make_pair(nr,nc));
cnt++;
}
}
res.push_back(cnt);
}
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
for(int j=0;j<N;j++){
cin>>map[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(map[i][j]=='1'&&!visited[i][j]){
bfs(i,j);
}
}
}
sort(res.begin(),res.end());
cout<<res.size()<<"\n";
for(int i:res){
cout<<i<<"\n";
}
}
DFS
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
#define MAX 25
char map[MAX+1][MAX+1];
bool visited[MAX+1][MAX+1];
int N;
vector<int> res;
int cnt;
int dr[4]={-1,0,1,0};
int dc[4]={0,1,0,-1};
void print(int i, int j){
cout<<"ii\n";
}
void dfs(int r, int c){
visited[r][c]=true;
cnt++;
for(int d=0;d<4;d++){
int nr=r+dr[d];
int nc=c+dc[d];
if(nr<0||nr>N-1||nc<0||nc>N<-1||map[nr][nc]!='1'||visited[nr][nc]) continue;
dfs(nr,nc);
}
}
int main() {
cin >> N;
for (int i = 0; i < N; i++) {
for(int j=0;j<N;j++){
cin>>map[i][j];
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if(map[i][j]=='1'&&!visited[i][j]){
cnt=0;
dfs(i,j);
res.push_back(cnt);
}
}
}
sort(res.begin(),res.end());
cout<<res.size()<<"\n";
for(int i:res){
cout<<i<<"\n";
}
}
このような問題を見るとBFSでやるに違いないがDFSでやることも多いより少ないコードReference
この問題について([BOJ/C+]#2267単番号), 我々は、より多くの情報をここで見つけました https://velog.io/@inryu/BOJ-C-2267-단지번호붙이기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol