Programming language/Algorithm

[Algorithm]DFS/BFS 개념

jino22 2022. 1. 18. 11:09

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 


DFS(Depth-First Search)

: 깊이를 우선적으로 탐색, 스택 및 재귀함수 사용

  최상단 노드를 시작으로 인접한 노드 중 방문하지 않은 노드를 깊이 우선으로 선택

  방문하지 않은 인접 노드가 없으면 스택의 최상단 노드를 꺼냄

  방문했던 노드를 체크하여 더 이상 방문할 수 있는 노드가 없는 경우 종료 

# chapter 5 DFS


def dfs(graphs, n, visit):
    visit[n]=True   # 방문
    #print(n)
    for i in graphs[n]:
        if visit[i]==0:
            visit[i]=1
            dfs(graphs, i, visit)
           
visit=[0]*9        # graph의 개수에 맞춰 노드 방문 여부 확인을 위한 리스트 생성
graphs=[
    # 첫번째 배열은 0번째 노드로, 노드 번호를 맞추기 위해 삽입
    [],[2,3,8],[1,7],[1,4,5],[3,5],[3,4],[7],[6,8],[1,7]
]


dfs(graphs, 1, visit)

BFS(Breadth-First Search)

: 너비 즉 가까운 노드를 우선적으로 탐색, 큐를 이용하여 구현

  시작 노드를 처음 큐에 넣고 방문처리

  이후 인접 노드 중 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리

  위의 과정을 반복하고 더 이상 큐에 확인할 노드가 없으면 종료

 

# chapter5 BFS

from collections import deque

def bfs(start, graph, visit):
    queue=deque([start])    # 인접 노드 담은 스택
    visit[start]=1			# 방문처리
    
    while queue:			# 큐에 노드가 없을 때까지 반복
        now=queue.popleft()	# 큐의 맨 처음 저장된 노드 pop
        print(now)
        
        for i in graph[now]:	# pop한 노드와 인접한 노드 
            if visit[i]==0:		# 인접한 노드가 방문하지 않은 노드인 경우
                queue.append(i)	# queue에 해당 노드를 삽입하고
                visit[i]=1		# 방문처리
                
graph=[
    [], [2,3,8],[1,7],[1,4,5],[3,5],[3,4],[7],[2,6,8],[1,7]
]

visit=[0]*9

bfs(1, graph, visit)

 

 

 

 

출처: 이것이 코딩테스트다 나동빈 저

728x90
반응형