문제
내 코드(C++)
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#define MAX 1001
using namespace std;
bool visit[MAX];
vector<int>list[MAX];
void dfs(int start);
void bfs(int start);
int main(void)
{
int N, M, V;
cin >> N >> M >> V;
for (int i = 1; i <= M; i++) {
int u, v; // 간선의 양 끝 점
cin >> u >> v;
list[u].push_back(v);
list[v].push_back(u);
}
for(int i=1;i<=N;i++) {
sort(list[i].begin(), list[i].end());
}
dfs(V);
for (int i = 1; i <= N; i++) {
visit[i] = false;
}
cout << endl;
bfs(V);
}
void dfs(int start)
{
visit[start] = true; // 방문
cout << start << " "; // 출력
for (int i = 0; i < list[start].size(); i++) {
int next = list[start][i];
if (visit[next] == false)
dfs(next);
}
}
void bfs(int start)
{
queue<int>q;
visit[start] = true; // 방문
q.push(start); // 큐에 밀어넣기
while (!q.empty()) {
int now = q.front(); // now = 큐의 제일 앞 원소
q.pop();
cout << now << " "; // pop될 때 방문했다, 출력
for (int i = 0; i < list[now].size(); i++) {
int next = list[now][i]; // next에 차례로 2, 5, 6
while (visit[next] == false) {
visit[next] = true;
q.push(next);
}
}
}
}
반응형
'Baekjoon > BFS' 카테고리의 다른 글
[1707] 이분 그래프(C++) (0) | 2021.09.09 |
---|---|
[10451] 순열 사이클(C++) (0) | 2020.01.10 |
[1697] 숨바꼭질(C++) (0) | 2019.09.15 |
[10026] 적록색약(C++) (0) | 2019.09.15 |
[2583] 영역 구하기(C++) (0) | 2019.09.14 |