[Algorithm] DFS와 BFS || Depth-First & Breadth-First Search

2022. 7. 1. 01:23·🎯PS/Algorithm

❕ 인접 행렬

인접 행렬은(Adjacency Matrix)로 2차원 배열을 이용하여 그래프의 연결 관계를 표현하는 방식이다.

INF = 999999999

graph = [
		[0, 7, 5],
		[7, 0, INF],
		[5, INF, 0]
]

print(graph)

 

❕ 인접 리스트(Adjacency List)

리스트로 그래프의 연결 관계 표현하는 방식

graph = [ [] for _ in range(3)]

# 노드와 거리
graph[0].append((1, 7))
graph[0].append((2, 5))

graph[1].append((0, 7))

graph[2].append((0, 5))

print(graph)

 
메모리 : 인접 리스트 win
속도 : 인접 행렬 win
 

📌DFS (스택)

DFS(Depth-First Search), 깊은 부분을 우선적으로 탐색하는 알고리즘.
1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
반복.

def dfs(graph, v, visited):
	visited[v] = True
	print(v, end = ' ')

	for i in graph[v]:
		if not visited[i]:
			dfs(graph, i, visited)

graph = [
			[],
			[2, 3, 8],
			[1, 7].
			[1, 4, 5],
			[3, 5],
			[3, 4],
			[7],
			[2, 6, 8],
			[1, 7]
]

visited = [False] * 9

dfs(graph, 1, visited)


📌BFS (큐)

BFS(Breadth First Search), 가까운 노드부터 탐색하는 알고리즘
1. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다.
2. 큐에서 노드를 꺼내 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리를 한다.
반복.

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

graph = [
			[].
			[2, 3, 8],
			[1, 7],
			[1, 4, 5],
			[3, 5],
			[3, 4],
			[7],
			[2, 6, 8],
			[1, 7]
]

visited = [False] * 9
bfs(graph, 1, visited)

 
 
출처) 이것이 코딩테스트다 with Python

반응형
저작자표시 (새창열림)
'🎯PS/Algorithm' 카테고리의 다른 글
  • [Algorithm/Python] 선택 정렬(Selection Sort)이란? || Sort
  • [Algorithm/Python] 파이썬 itertools에서 combinations, permutations를 사용하지 않고, 조합과 순열 구현
  • [Algorithm] DP(Dynamic Programming), 동적 계획법
  • [Algorithm] 시간 복잡도 & 공간 복잡도
dmaolon
dmaolon
프로그래밍을 공부한 내용을 기록하는 공간입니다.
  • dmaolon
    기록 남기기
    dmaolon
  • 전체
    오늘
    어제
    • ALL (260)
      • ➰ Series (5)
      • 🎯PS (168)
        • Algorithm (15)
      • ☕ Java (11)
      • 🍀 Spring Boot (29)
      • 💬 Database (9)
      • 🐣 Computer Science (14)
      • 👍 Daily (4)
      • 🎁ReactJS (4)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    백준
    알고리즘
    프로그래머스
    코딩
    dfs
    프로그래밍
    BFS
    파이썬
    자바
    Spring
  • hELLO· Designed By정상우.v4.10.1
dmaolon
[Algorithm] DFS와 BFS || Depth-First & Breadth-First Search
상단으로

티스토리툴바