반응형
250x250
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 |
Tags
- dfs
- 2022년 정보처리기사 실기
- 백준
- 파이썬
- 백준 백트랙킹 파이썬
- 코딩테스트
- 백준 그래프 탐색 파이썬
- 코드
- BOJ
- 백준 그래프 이론 파이썬
- 정보처리기사
- 정보처리기사 실기
- 그리디
- it
- 자바
- 코딩
- 토마토
- 자료구조
- 백준 토마토 파이썬
- 프로그래머스
- 프로그래밍
- python
- 프로그래머스 파이썬
- 백준 백트랙킹
- BFS
- 2022년 정보처리기사 실기 1회 가답안
- 백준 N-Queens
- 알고리즘
- 2022년 정보처리기사 실기 가답안
- 정보처리기사 실기 시험
Archives
- Today
- Total
코딩,안되면 될때까지
탐색(DFS/BFS) 본문
728x90
반응형
1)DFS
:Depth-First Search, 깊이우선탐색,그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘
- 탐색 시작노드를 스택에 삽입하고 방문처리를 한다.
- 스택의 최상단 노드에 방문하지 않은 인접노드가 있으면 그 인접노드를 스택에 넣고 방문처리를 한다. 방문하지 않은 인접노드가 없으면 스택에서 최상단 노드를 꺼낸다.
- 위의 과정을 더이상 수행할수 없을때까지 방문한다.
<코드-파이썬>
#DFS 메서드의 정의
def dfs(graph,v, visited):
#현재 노드를 방문 처리
visited[v]=True
print(v,end=' ')
#현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visited[i]:
dfs(graph,i,visited)
#각 노드가 연결된 정보를 리스트 자료형으로 표현(2차원 리스트)
graph=[
[],
[2,3,8], #1번노드의 인접노드
[1,7], #2번노드의 인접노드
[1,4,5], #3번노드의 인접노드
[3,5], #4번노드의 인접노드
[3,4], #5번노드의 인접노드
[7], #6번노드의 인접노드
[2,6,8], #7번노드의 인접노드
[1,7] #8번노드의 인접노드
]
#각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트)
visited=[False]*9
#정의된 Dfs 함수 호출
dfs(graph,1,visited)
[결과] : 1,2,7,6,8,3,4,5(노드방문순서)
방문노드 | ||||||||||
6->인접노드 : 7(방문0) | 8->인접노드 :1,7 (방문0) |
|||||||||
7 | 7 | 7 | 7 | 7 | ||||||
2 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | |||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
반복횟수 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
방문노드 | |||
5 | |||
4 | 4 | ||
3 | 3 | ||
1 | 1 | ||
반복횟수 | 11 | 12 | 13 |
2)BFS
:Breadth First Search, sjql우선탐색, 가까운 노드를 우선적으로 탐색하는 알고리즘
- 탐색 시작노드를 큐에 삽입하고 방문처리를 한다.
- 큐에서 노드를 꺼내 해당노드의 인접노드중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리를 한다.
- 위의 과정을 더이상 수행할수 없을때까지 방문한다.
<코드-파이썬>
from collections import deque
def bfs(graph,start,visited):
queue = deque([start])
visited[start]=True
#큐가 빌때까지 반복
while queue:
#큐에서 하나의 원소를 뽑아 출력
v=queue.popleft()
print(v,end=' ')
#해당 원소와 연결된, 아직 방문하지 않은 원소들을 큐에 삽입
for i in graph[v]:
#해당 원소와 연결된, 아직 방문하지 않은 원소들을 큐에 삽입
if not visited[i]:
queue.append(i)
visited[i]=True
#각 노드가 연결된 정보를 리스트 자료형으로 표현(2차원 리스트)
graph=[[],[2,3,8],[1,7],[1,4,5],[3,5],[3,4],[7],[2,6,8],[1,7]]
#각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트)
visited = [False]*9
#정의된 BFS 함수 호출
bfs(graph,1,visited)
방문노드 | |||||||||
6 | 6 | 6 | |||||||
5 | 5 | 5 | 5 | ||||||
4 | 4 | 4 | |||||||
7 | 7 | 7 | |||||||
8 | 8 | 8 | |||||||
3 | 3 | ||||||||
2 | |||||||||
1 | |||||||||
반복횟수 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
728x90
반응형
'알고리즘' 카테고리의 다른 글
bisect (3) | 2022.03.02 |
---|---|
우선순위 큐( heapq) (0) | 2022.03.01 |
Comments