본문 바로가기
IT/Algorithm

DFS / BFS

by 천빈 2021. 6. 2.

BFS(Breadth First Search) 너비 우선 탐색

  • 시작 정점으로부터 가까운 정점을 방문하고, 멀리 떨어진 정점을 나중에 방문하는 순회방식
  • 두 노드사이의 최단경루를 탐색하거나, 임의의 경로를 검색할 때 사용한다.
  • 큐 자료구조를 사용한다.
  • 데이터가 N개의 개수인 경우, O(N)의 시간이 소요된다.
while len(queue) > 0;
	count = len(queuq) # 같은 거리에 존재하는 큐 데이터 개수
    for time in range(count):
    	now = queue.pop(0)	# 같은 거리에 있는 큐 갯수만큼 검사
        if now == dest:		# 정답이 존재하면 반환
        	return answer
           
        for i in data:
        	if i[0]=now and visited[i[1]-1]==False:
            	queue.append(i[1])
                visited[i[1]-1]=True
            elif i[1]==now and visited[i[0]-1]==False:
            	queue.append(i[0])
                visited[i[0]-1]=True
     answer+=1
  return answer

 

 

 

DFS(Depth First Search) 깊이 우선 탐색

  • 하나의 경우에 대해 모든 경우의 수를 조사하고, 다음 경우의 수를 조사하는 방법
  • 모든 노드를 방문하고자 할 때 사용하는 방법
  • 스택 자료구조 방식을 사용한다
while len(stack)>0:
	now = stack.pop()	# 스택의 가장 마지막 데이터 추출
    if now == dest:
    	return True
    x = now[1]
    y = now[0]
    # 정답 여부 검사
    
    if x - 1 > -1:		# 왼쪽으로 이동할 수 있다면
    	if maps[y][x-1]==0:
        	stack.append([y,x-1])
            maps[y][x-1]=2
        if maps[y][x+1]==0:
        	stack.append([y,x+1])
            maps[y][x+1]=2
        if maps[y-1][x]==0:
        	stack.append([y-1,x])
            maps[y-1][x]=2
        if maps[y+1][x]==0:
        	stack.append([y+1,x])
            maps[y+1][x]=2
    return False

'IT > Algorithm' 카테고리의 다른 글

완전탐색 / 이분탐색  (0) 2021.05.31
STACK / QUEUE  (0) 2021.05.17
시계열 데이터(Time Series Data)  (0) 2021.04.15