일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gradle
- react
- 통영여행
- 통영예쁜카페
- 꼴뚜기회
- JavaScript
- 퇴사후공무원
- 서울숲누룽지통닭구이
- tomcat7
- ELK
- 한남동맛집
- 한성대맛집
- 파이썬
- 통영
- 돈암동맛집
- 국가직
- 뚝섬역맛집
- 성신여대맛집
- 통영에어비앤비
- 방이편백육분삼십
- npm
- 방이편백육분삼십성신여대
- ubuntu자바설치
- 성북구맛집
- 성신여대편백집
- 공무원
- 자바스크립트에러처리
- 영화추천
- 스페인여행
- springboot
- Today
- Total
코린이의 기록
[C언어] BFS (Breadth First Search) 본문
이번 포스팅은 인접 행렬과 visted을 통한 BFS Algorithm을 구현해본다. BFS는 DFS와 함께 공부 되는것이 좋으니 아래 DFS도 참고하도록 한다. 아래 DFS에서는 인접행렬에 대한 내용도 다룬다. BFS와 내용이 중복되니 이번 포스팅에서는 생략한다.
Keywords
- Vertex = Edge : 정점, 꼭 (0,1,2,3,4,5,6,7)를 의미한다.
- 인접 행렬 : 그래프 이론에서, 인접행렬 (Adjacency Matrix)은 그래프에서 어느 꼭짓점(Vertex)들이 어느 변으로 연결되어 있는지를 나타내는 정사각형 행렬이다.
- Visited : 어느 꼭짓점을(Vertex)방문 했는가에 대한 여부, flag같은 개념
이것만 기억하자!
- 어떤 Vertex에서 인접해있는 Vertex를 모두 방문하자.
시나리오
Start Vertex는 0
1. 우선 Queue에 vertex 0을 넣어준다.
2. Queue에서 요소를 빼는데, 이때 요소는 Current Vertex 이다. (이 Current Vertex를 반복문으로 돌면서 위치를 바꿔가며 Queue에 넣을 것임)
3. Current Vertex에서 인접한 요소들을 Queue에 넣어준다. 단 이때 요소는 한번도 방문된적이 없는 요소여야 한다. (visited != true(1))
4. 더이상 Current Vertex에 인접한 요소가 없으면 Queue에서 요소 하나를 뺀다. (Dequeue)
5. 2번-4번 반복
BFS
line 49 : 첫번째 시작되는 Vertex를 queue에 넣어준다.
line 52 : queue가 비어있지 않는 동안 아래 작업들을 수행한다.
line 53 : queue가 비어있지 않으면 우선 하나씩 dequeue를 한다.
line 55 : 현재 vertex부터 vertex의 수만큼 전수 조사하여 인접된 행렬과 방문된적이 한번도 없는 vertex를 찾는다.
line 56 : 아직 방문된적이 없고 인접행렬이면 해당 vertex를 방문할 것이기 때문에 visited flag를 1로 set해준다.
line 57 : 방문된 vertex는 queue에 넣어준다.
결과 화면
전체 소스
필요한 소스 : include/queue.h , queue.c, bfs.c
$ gcc -I./include -o bfs bfs.c queue.c
queue.c 소스는 아래 URL를 참고 한다.
http://soye0n.tistory.com/12?category=764668
bfs.c
'c&c++ > 알고리즘' 카테고리의 다른 글
[C언어] DFS(Depth First Search) (0) | 2018.05.03 |
---|