DFS&BFSコンセプト
DFS深さ優先ブラウズアルゴリズム グラフィックで深さノードを優先ブラウズするスタックデータ構造または再帰関数 を使用する.動作過程 スタックにナビゲーション開始ノードを挿入し、 アクセスを処理するスタック内の隣接ノードがアクセスしていない場合、アクセス処理のためにスタックに格納されます.アクセスされていない隣接ノードがない場合、最上位ノード がスタックから取り出される.
ステップを2つ目のプロセスが実行できなくなるまで繰り返します.
※一般番号の低い隣接ノードは へのアクセスを開始する.ノードのブラウズ順序(スタックに入る順序) 以下のI/Oを使用してデータを受信する場合、DFSアルゴリズムはどのように変化しますか? I/O例幅優先ナビゲーションアルゴリズム キューリソース構造 角画像(幹線)のコストは、同一の仮定における最短距離の計算に用いることができる. 動作過程 ナビゲーション開始ノードをキューに挿入し、 アクセスを処理するキューから1つのノードを取り出し、そのノードのすべての隣接ノードのすべての未アクセスノードをキューに挿入し、アクセス処理 を行う.
ステップを2つ目のプロセスが実行できなくなるまで繰り返します.
※一般番号の低い隣接ノードは へのアクセスを開始する.ノードのナビゲーション順序(キューに入る順序) 以下のI/Oを使用してデータを受信する場合、BFSアルゴリズムはどのように変化しますか? I/O例
ステップ
※一般番号の低い隣接ノードは
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 = [
[], # 0번노드 : 존재하지 않음. 인덱스와 1번부터 시작하는 그래프 노드의 key를 맞추기 위함.
[2, 3, 8], # 1번노드 : 인접노드는 2,3,8 노드
[1,7], # 2번노드 : 인접노드는 1,7 노드
[1,4,5], # 3번노드 : ...
[3,5], # 4번노드 : ...
[3,4],
[7],
[2,6,8],
[1,7], # 8번노드 : ...
]
# 각 노드가 방문된 정보를 표현 (1차원 리스트)
visited = [False] * 9
# 정의된 DFS 함수 호출
dfs(graph, 1, visited)
DFS2#입력
4 5 1
1 2
1 3
1 4
2 4
3 4
# 출력
1 2 4 3
コード#コード#n, m, v = map(int, input().split(" "))
matrix = [[0] * (n+1) for _ in range(n+1)] # n + 1 하는 이유 : 0번 인덱스부터 하면 헷갈리니까 맞추려고
visited = [0] * (n+1)
for i in range(1, m+1):
frm, to = map(int, input().split(" "))
matrix[frm][to] = matrix[to][frm] = 1
def dfs(graph, visited, v):
if visited[v] == 0:
visited[v] = 1
print(v, end = " ")
for i in range(1, n+1):
if graph[v][i] == 1 and visited[i] == 0:
dfs(graph, visited, i)
dfs(matrix, visited, v)
BFSステップ
※一般番号の低い隣接ノードは
from collections import deque
def bfs(graph, start, visited):
# 큐 구현을 위해 deque 라이브러리 사용
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 = True
graph = [
[], # 0번노드 : 존재하지 않음. 인덱스와 1번부터 시작하는 그래프 노드의 key를 맞추기 위함.
[2, 3, 8], # 1번노드 : 인접노드는 2,3,8 노드
[1,7], # 2번노드 : 인접노드는 1,7 노드
[1,4,5], # 3번노드 : ...
[3,5], # 4번노드 : ...
[3,4],
[7],
[2,6,8],
[1,7], # 8번노드 : ...
]
# 각 노드가 방문된 정보를 표현 (1차원 리스트)
visited = [False] * 9
# 정의된 bfs 함수 호출
bfs(graph, 1, visited)
BFS2#입력
4 5 1
1 2
1 3
1 4
2 4
3 4
# 출력
1 2 3 4
コード#コード#n, m, v = map(int, input().split(" "))
matrix = [[0] * (n+1) for _ in range(n+1)] # n + 1 하는 이유 : 0번 인덱스부터 하면 헷갈리니까 맞추려고
visited = [0] * (n+1)
for i in range(1, m+1):
frm, to = map(int, input().split(" "))
matrix[frm][to] = matrix[to][frm] = 1
def dfs(graph, visited, v):
if visited[v] == 0:
visited[v] = 1
print(v, end = " ")
for i in range(1, n+1):
if graph[v][i] == 1 and visited[i] == 0:
dfs(graph, visited, i)
dfs(matrix, visited, v)
Reference
この問題について(DFS&BFSコンセプト), 我々は、より多くの情報をここで見つけました https://velog.io/@yozzum/DFSBFS-개념テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol