https://www.acmicpc.net/problem/1260
1. 단계 : 시작 정점을 방문했다고 표시하고, Queue에 push
void bfs(int start){
checked[start]=1;
queue<int> q;
q.push(start);
while(!q.emplace()){
}
}
2. 단계
시작 정점을 방문했다고 표시하고, Queue에 push
Queue가 빌때까지 반복하면서, queue의 front값을 받고, pop함
void bfs(int start){
checked[start]=1;
queue<int> q;
q.push(start);
while(!q.empty()){
int current = q.front();
q.pop();
printf("%d ", current);
}
}
3. 단계
시작 정점을 방문했다고 표시하고, Queue에 push
Queue가 빌때까지 반복하면서, queue의 front값을 받고, pop함
queue의 front 정점(current)을 대상으로 연결된 정점(next)들을 찾음
next중에 방문하지 않은 정점이면, 방문 표시하고 queue에 push
이것을 queue가 빌때까지 반복
void bfs(int start){
checked[start]=1;
queue<int> q;
q.push(start);
while(!q.empty()){
int current = q.front();
q.pop();
printf("%d ", current);
for(int i=0; i<vxy[current].size(); i++){
int next=vxy[current][i];
if(checked[next] == 0){
q.push(next);
checked[next]=1;
}
}
}
}
전체 소스코드
#include <bits/stdc++.h>
using namespace std;
int checked[10000];
vector<int>vxy[10000];
void dfs(int start)
{
checked[start]=1;
printf("%d ",start);
for(int i=0; i<vxy[start].size(); i++){
int next=vxy[start][i];
if(checked[next] == 0){
dfs(next);
}
}
}
void bfs(int start){
checked[start]=1;
queue<int> q;
q.push(start);
while(!q.empty()){
int current = q.front();
q.pop();
printf("%d ", current);
for(int i=0; i<vxy[current].size(); i++){
int next=vxy[current][i];
if(checked[next] == 0){
q.push(next);
checked[next]=1;
}
}
}
}
int main() {
int a,b,c,n,m,i;
scanf("%d %d %d",&n,&m,&c);
for(i=1; i<=m; i++){
scanf("%d %d",&a,&b);
vxy[a].push_back(b);
vxy[b].push_back(a);
}
for(i=1; i<=n; i++){
sort(vxy[i].begin(),vxy[i].end());
}
dfs(c);
for(i=0; i<=n; i++)checked[i]=0;
printf("\n");
bfs(c);
return 0;
}
'정보올림피아드-KOI > BOJ' 카테고리의 다른 글
백준-N-Queen : 3344번 (0) | 2019.12.26 |
---|---|
백준 - 타일링 : 1793번 (0) | 2019.12.23 |
백준 - N과 M (4) :15652 번 (0) | 2019.12.19 |
백준 - N과 M (3) : 15651번 (0) | 2019.12.19 |
백준 - A/B : 1008번 (0) | 2019.12.19 |