많은 양의 데이터 중 원하는 데이터를 찾는 과정
BFS / DFS : 대표적인 그래프 탐색 알고리즘
# 문제 조건 입력
n, m = map(int, input().split())
visited = [[False] * m for _ in range(n)]
# graph 입력
graph = []
for i in range(n):
graph.append(list(map(int, input())))
dx = [1,-1,0,0]
dy = [0,0,1,-1]
count = 0
# dfs 메소드 정의
def dfs(x, y):
# 범위 벗어나면 재귀 끝.
if x < 0 or x >= n or y < 0 or y >= m:
return False
# 첫 번째 노드 방문
if not graph[x][y]:
graph[x][y] = 1
# 상,하,좌,우의 노드가 방문 안되어 있으면 dfs 호출하여 방문하기
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
dfs(nx, ny)
return True
else:
return False
# N X M 행렬 돌면서 dfs 수행
for i in range(n):
for j in range(m):
if dfs(i,j) == True:
count += 1
print(count)
https://github.com/ybkim-dev/algorithms/blob/master/DFSBFS/음료수%20얼려%20먹기%20with%20dfs.py
graph[nx][ny] = graph[x][y] + 1from collections import deque
# 문제 조건 입력
n, m = map(int, input().split())
# graph 입력
graph = []
for _ in range(n):
graph.append(list(map(int, input())))
visited = [[False] * m for _ in range(n)]
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
def bfs(x, y):
global count
queue = deque()
queue.append([0,0])
visited[0][0] = True
while queue:
v = queue.popleft()
for i in range(4):
nx = v[0] + dx[i]
ny = v[1] + dy[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m:
continue
else:
if visited[nx][ny] == False and graph[nx][ny] == 1:
queue.append([nx, ny])
graph[nx][ny] = graph[v[0]][v[1]] + 1
visited[nx][ny] = True
bfs(0,0)
print(graph[n-1][m-1])
https://github.com/ybkim-dev/algorithms/blob/master/DFSBFS/미로%20탈출.py