1.노드(node) : 위치를 말하고 Vertex(정점)라고도 함
2. 간선(edge) : 위치 간의 관계를 표시헌 선, link 또는 branch 라고도 함
3. 인접 정점 (Adjacent Vertax) 간선으로 직접 연결된 정점
-> 정점들과 같은 레벨에 있는 형제 노드들을 먼저 탐색하는 방식
-> 큐 두개를 이용한다
-> 시간 복잡도 : O(node+edge)
#shift+ Enter
def BFS(graph, root):
visited, need_visit = list() , list() # 큐 두개
need_visit.append(root) #need_visit 에 시작할 원소를 넣음
while need_visit: # need_visit가 NUll 이란 것은 모든 그래프를 순환했다
node = need_visit.pop(0) # 큐 역활
if node not in visited: # need_Vist 의 첫 원소가 방문한 건지 아닌지 확인
visited.append(node)
need_visit.extend(graph[node])
return visited
graph =dict(); # 그래프를 딕셔너리에 넣음
graph['A'] = ['B', 'C']
graph['B'] = ['A', 'D']
graph['C'] = ['A', 'G', 'H', 'I']
graph['D'] = ['B', 'E', 'F']
graph['E'] = ['D']
graph['F'] = ['D']
graph['G'] = ['C']
graph['H'] = ['C']
graph['I'] = ['C', 'J']
graph['J'] = ['I']
print(BFS(graph,'A'))
->한 노드를 타고 끝까지 순회한 후 현제 자식의 노드를 타고 내려가며 순회
-> 큐, 스택을 사용한다
->-> 시간 복잡도 : O(node+edge)
graph =dict(); # 그래프를 딕셔너리에 넣음
graph['A'] = ['B', 'C']
graph['B'] = ['A', 'D']
graph['C'] = ['A', 'G', 'H', 'I']
graph['D'] = ['B', 'E', 'F']
graph['E'] = ['D']
graph['F'] = ['D']
graph['G'] = ['C']
graph['H'] = ['C']
graph['I'] = ['C', 'J']
graph['J'] = ['I']
def DFS(graph,start_node):
visited, need_visit = list(), list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop()
if node not in visited:
visited.append(node)
need_visit.extend(graph[node])
return visited