DFS
- 그래프의 시작 노드에서 출발하여 탐색할 한쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 다시 탐색을 수행하는 알고리즘
- 재귀 함수로 구현, 스택 자료구조 이용
시간복잡도
- O(노드 수 + 에지 수)
vector<int> visit;
void DFS(int node)
{
if (visit[node])
{
return;
}
visit[node] = true;
for(int i : 현재노드이름[node]
{
if(visit[i] == false)
{
DFS[i];
}
}
}
BFS(너비 우선 탐색)
- 시작 노드에서 출발해 시작 노드를 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘
- FIFO 탐색, Queue 자료구조 이용
시간복잡도
- O(노드 수 + 에지 수)
vector<int> visit;
void BFS(int node)
{
queue<int> q;
q.push(node);
visit[node] = true;
while(!q.empty())
{
//큐에서 노드 데이터를 가져온다.
int now_node = q.front();
q.pop();
cout << now_node << " ";
for (int i : 현재 연결노드이름[now_node])
{
if(!visit[i])
{
visit[i] = true;
q.push(i);
}
}
}
}
'Leaning > C++' 카테고리의 다른 글
| [Hackerrank] Vector-Erase (0) | 2024.11.04 |
|---|---|
| [Hackerrank] Vector-Sort (0) | 2024.11.04 |
| C++ 자료구조(STL) (0) | 2024.10.24 |
| [HackerRank] Hotel Prices (0) | 2024.10.17 |
| [HackerRank] C++ Class Template Specialization (0) | 2024.10.17 |