반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- kubernetes
- 이펙티브 자바
- 티스토리챌린지
- 이펙티브자바
- java
- 스프링
- 카카오 면접
- ElasticSearch
- 알고리즘
- 스프링부트
- effectivejava
- 예제로 배우는 스프링 입문
- Spring
- 클린아키텍처
- 엘라스틱서치
- 스프링핵심원리
- 오블완
- Sort
- Effective Java
- Effective Java 3
- k8s
- 김영한
- 알고리즘정렬
- 코딩테스트
- JavaScript
- 이차전지관련주
- 스프링 핵심원리
- 카카오
- 자바스크립트
- 자바
Archives
- Today
- Total
Kim-Baek 개발자 이야기
BFS (Breath First Search) 본문
BFS는 너비우선탐색 이라고 블리는 Graph 알고리즘 중 하나이다.
- BFS 는 일반적으로 Queue를 이용해 구현
- 시작 정점과 인접한 모든 정점을 방문하는 방법
- 얻어진 해가 최단 경로가 된다는 것을 보장
- 경로가 매우 길 경우에는 많은 저장 Memory 가 필요
C++를 이용해 BFS를 구현
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int>* vertex;
bool* checked;
void bfs(int st);
int main() {
int n, m, s;
int from, to;
cin >> n >> m >> s;
vertex = new vector<int>[n + 1];
checked = new bool[n + 1];
for (int i = 0; i < n + 1; i++) checked[i] = false;
while (m--) {
cin >> from >> to;
vertex[from].push_back(to);
vertex[to].push_back(from);
}
for (int i = 0; i < n; i++) sort(vertex[i].begin(), vertex[i].end());
bfs(s);
delete[] vertex;
delete[] checked;
return 0;
}
void bfs(int st) {
cout << st << " ";
que.push(st);
checked[st] = true;
while (!que.empty()) {
int from = que.front();
que.pop();
for (int i = 0; i < vertex[from].size(); i++) {
if (!checked[vertex[from][i]]) {
cout << vertex[from][i] << ' ';
checked[vertex[from][i]] = true;
que.push(vertex[from][i]);
}
}
}
}
알고리즘 연습문제
반응형
'컴퓨터 공학 > 자료구조, 알고리즘' 카테고리의 다른 글
퀵 정렬 (Quick Sort) (0) | 2020.09.28 |
---|---|
병합 정렬 (Merge Sort) (0) | 2020.09.27 |
삽입 정렬 (Insertion Sort) (0) | 2020.09.26 |
선택 정렬 (Selection Sort) (0) | 2020.09.25 |
[Tree] 트리 순회 - Tree traversal (0) | 2020.08.07 |
Comments