반응형
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#include <vector>
#include<algorithm>
using namespace std;
vector<int> gph[1001];
bool chk[1001];
void dfs(int node)
{
chk[node] = true;
cout << node << " ";
for (int i = 0; i < gph[node].size(); i++)
{
int next = gph[node][i];
if (chk[next] == false)
{
dfs(next);
}
}
}
void bfs(int node)
{
memset(chk, false, sizeof(chk));
queue<int> q;
chk[node] = true;
q.push(node);
while (!q.empty())
{
node = q.front();
q.pop();
cout << node << " ";
for (int i = 0; i < gph[node].size(); i++)
{
int next = gph[node][i];
if (chk[next] == false)
{
chk[next] = true;
q.push(next);
}
}
}
}
int main()
{
int n, m, v;
cin >> n >> m >> v;
while (m--)
{
int p1, p2;
cin >> p1 >> p2;
gph[p1].push_back(p2);
gph[p2].push_back(p1);
}
for (int i = 1; i <= n; i++)
{
sort(gph[i].begin(), gph[i].end());
}
dfs(v);
cout << endl;
bfs(v);
cout << endl;
return 0;
}
기본적인 그래프의 탐색방법인 dfs와 bfs를 구현하는 문제입니다.
정점 번호가 작은 것부터 먼저 방문하라는 조건에 의해 인접리스트의 정렬이 필요합니다.
- BFS는 queue가 pop하는 값의 순서가 탐색순서
반응형
'개발 > 알고리즘 & 자료구조' 카테고리의 다른 글
[2017 카카오 코드 예선] 카카오 프렌즈 컬러링북 (15) | 2021.08.10 |
---|---|
[프로그래머스] 기능 개발 (11) | 2021.08.08 |
백준(BOJ) 11724번 연결요소의 개수 (0) | 2021.08.02 |
백준(BOJ) 1406번 에디터 (0) | 2021.08.02 |
백준(BOJ) 11728번 배열 합치기 (0) | 2021.08.02 |