목록algorithms/#5 DFS and BFS (5)
yuns
아이스크림 n, m = map(int, input().split()) graph = [] for i in range(n): graph.append(list(map(int, input()))) def dfs(x, y): if x = n or y >= m or y = n or ny >= m: continue if graph[nx][ny] == 0: continue if graph[nx][ny] == 1: graph[nx][ny] = graph[x][y] + 1 queue.append((nx, ny)) return graph[n - 1][m - 1] print(bfs(0, 0))
DFS BFS 동작 원리 stack queue 구현 방법 재귀 함수 이용 큐 자료구조 이용
가까운 노드부터 탐색하는 알고리즘 알고리즘 동작 방식 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다. 큐에서 노드를 꺼내 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문처리를 한다. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다. from collections import deque def bfs(graph, start, visited): queue = deque([start]) visited[start] = True #queue가 빌 때까지 반복함을 의미 while queue: v = queue.popleft() print(v, end=' ') for i in graph[v]: if not visited[i]: queue.append(i) visited[i] =..
그래프 구조 - 노드(node, vertex)와 간선(edge)로 이루어짐 인접행렬 방식: 2차원 배열로 그래프의 연결 관계를 표현하는 방식 INF = 99999999 graph = [ [0, 7, 5], [7, 0, INF], [5, INF, 0] ] 인접리스트 방식: 연결리스트로 그래프의 연결 관계를 표현하는 방식 graph = [[] for _ in range(3)] #node k와 edge 크기 n으로 연결된 node d에 대하여: graph[k].append((d, n)) #노드 0에 연결된 노드들에 대한 정보 graph[0].append((1, 7)) graph[0].append((2, 5)) #노드 1에 연결된 노드들의 정보 graph[1].append((0, 7)) #노드 2에 연결된 노드..
탐색: 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 자료구조: 데이터를 표현하고 관리하고 처리하기 위한 구조 스택(Stack): FILO, LIFO 구조 append(), pop()메소드 사용 st = [] st.append(2) st.append(3) st.pop() 큐(Queue): FIFO구조 from collections import deque queue = deque() queue.append(5) quque.append(2) quque.popleft() #for printing queue.reverse() 재귀함수(Recursive Function): 자기 자신을 다시 호출하는 함수 함수로 정의하고 호출하는데 너무 많이 호출하게 될 경우 RecursionError 발생 재귀함수의 종료조..