📄 Graph
- 데이터 간의 연결 관계를 표현하는 자료구조
- 정점(Vertex) : 위치 개념. 노드(Node)라고도 부름.
- 간선(Edge) : 위치 간의 관계. 즉, 노드를 연결하는 선.
- 탐색(Search) : 시작점에서 간선(Edge)을 타고 이동할 수 있는 정점(Vertex)들을 찾는 문제
📄 DFS (Depth First Search, 깊이 우선 탐색)
- 막힐 때까지 깊게 탐색하고, 그 다음 다른 루트를 탐색하는 방식
- 재귀함수나 Stack으로 구현한다.
✏️ 코드 구현
#include <vector>
using namespace std;
const int MAX = 100;
vector<int> adj[MAX];
bool visited[MAX];
void dfs(int cur)
{
visited[cur] = true;
for (int next : adj[cur])
{
if (!visited[next])
{
dfs(next);
}
}
}
📄 BFS (Breadth First Search, 너비 우선 탐색)
- 가까이 인접한 곳들부터 넓게 탐색하고, 그 다음 거리에 있는 것들을 탐색하는 방식
- Queue로 구현한다.
✏️ 코드 구현
#include <vector>
#include <queue>
using namespace std;
const int MAX = 100;
vector<int> adj[MAX];
bool visited[MAX];
void bfs(int start)
{
queue<int> q;
visited[start] = true;
q.push(start);
while (!q.empty())
{
int cur = q.front();
q.pop();
for (int next : adj[cur])
{
if (!visited[next])
{
visited[next] = true;
q.push(next);
}
}
}
}
📄 참고 자료