일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- gram 액정 교체
- 싸피 지원자격
- 싸피 추천코드
- 인디노래 추천
- 싸피 추천인
- 그램 액정 교체비용
- 정처기 인강 추천
- 삼성 싸피 지원
- 싸피 혜택
- 코딩테스트
- 폰 찾기
- 폰 잃어버렸을때
- 정처기 실기
- 봄 노래
- SSAFY
- 삼성 싸피
- LG 서비스센터 영업시간
- 폰 도난
- 정보처리기사 준비물
- #코드트리 #코딩테스트 #코딩테스트실력진단
- 정보처리기사 실기
- 코딩테스트실력진단
- 싸피 모집설명회 다시보기
- 폰 위치추적
- 정처기 후기
- 갤럭시 위치추적
- 학생메일
- 싸피 모집설명회
- 코드트리
- 싸피 11기
- Today
- Total
포포's 코딩&일상 기록
그래프 - BFS 탐색 - 인접리스트 vs 인접행렬 본문

탐색은 그래프와 시작점이 주어진다.
아웃풋 : 그점에서 간선을 타고 갈수있는 모든 위치 ... 이걸 찾고싶다
BFS = 너비우선탐색
B First Search
가까이 있는것들로부터 차근차근 퍼져나간다.
호수에 돌을 던지는 모습
(cf. 깊이우선탐색: 개미집)
큐 Queue 자료구조 활용하여 탐색 ( FIFO : 선입선출 )
(cf. 깊이우선탐색:재귀함수)
*큐에 담긴 자료는 ... 여기를 갈수있다는걸 인지한 상태임을 의미함
새로운 점을 찾을때마다 계속 큐에 넣어준다.
큐에서 원소를 꺼내면
시작점에서 해당 정점까지 갈 수 있었다는 것을 알게된것임.
다시 해당 정점에 연결된 애들을 보면서 큐에 넣어주며
확장해서 탐색
BFS 기본코드
def bfs():
while q: #q 가 비어있지 않다면... 이라는 조건
curr_v= q.popleft()
for next_v in range(1,VERTICES_NUM +1): #꺼낸점과 연결된 모든점을 찾음
if graph[curr_v][next_v] and not visited[next_v]: #처음만난 점만 찾는다
visited[next_v]] = True
q.append(next_v)
* q 가 비어있지 않을때 반복하는이유
아직은 더 확장할수있을것 같으니까.. 좀더 탐색해보자 라는 의미
로직
q에서 뭔가 꺼냄 ( 얘는 시작점으로부터 방문할수있으니까 들어간거임)
얘한테서 추가로 또 다른 친구들로 갈수있는지 탐색할거임
q 가 빌때까지 계속 탐색하고
q 가 비면 그순간의 visited 배열의 값이 탐색결과임
-> 이거도 인접리스트가 편할것같다.
연결된 정점들을 하나씩 보면서 확장
특정 정점과 연결된 애들을 다 뽑음
정리
그래프 탐색시 인접리스트를 사용하는게 좋다!!
어떨땐 DFS 가 좋고, 어떨땐 BFS 가 좋다.
그래프 탐색에서는 둘다 똑같지만,,,
각각이 탐색보다 더 많은 부가 효과를 가져옴... (우리수준에선 너비우선탐색BFS 만 써도 되는거 배우긴함)
최근에는 BFS 만 배워도 괜찮음!!!
결론적으로 모든점을 방문한다는 점에서는 같지만,,
방문순서가 다르기때문에 생기는 side effect 가 있음
'코테 > 특강' 카테고리의 다른 글
8월 19일 토요일 공부 (0) | 2023.08.19 |
---|---|
(다시풀기...)8월 10일 목요일 코테 : BFS 알고리즘 강의 듣고 풀이 (0) | 2023.08.18 |
8월 3일 목요일 코테 : 알고리즘 강의 dfs (0) | 2023.08.16 |
그래프 - DFS 탐색 - 인접리스트 vs 인접행렬 (0) | 2023.08.16 |
자료구조- 인접행렬, 인접리스트 (0) | 2023.08.16 |