@この記事は公開番号から来ています:csdn2299、公開番号プログラマアカデミーに注目したい
この記事では、Pythonデータ構造とアルゴリズムグラフの幅優先検索アルゴリズムと深さ優先検索アルゴリズムについて説明します。次のように、参考のために共有してください。
ウィキペディアの疑似コード実装によると:
幅優先BFS:
キュー、コレクションを使用
見つかった最初のノードをマークしてキューに入れる
各ループはキューからノードをポップします
ノードのすべての接続ポイントをキューに入れ、検出されたことをマークします
キューを介して、迷路の交差点にあるすべてのドアを開き、1つのドアから入り、内側のドアを開き続けてから、前のドアに戻ります
"""
procedure BFS(G,v) is
let Q be a queue
Q.enqueue(v)
label v as discovered
while Q is not empty
v ← Q.dequeue()
procedure(v)
for all edges from v to w in G.adjacentEdges(v) do
if w is not labeled as discovered
Q.enqueue(w)
label w as discovered
"""
def procedure(v):
pass
def BFS(G,v0):
""" 广度优先搜索 """
q, s = [], set()
q.extend(v0)
s.add(v0)
while q: # 当队列q非空
v = q.pop(0)
procedure(v)
for w in G[v]: # 对图G中顶点v的所有邻近点w
if w not in s: # 如果顶点 w 没被发现
q.extend(w)
s.add(w) # 记录w已被发现
深さ優先DFS
スタック、コレクションを使用
最初のノードがスタックにプッシュされます
ループの各ラウンドは、スタックからノードをポップし、見つかったことをマークします
ポップアップするノードごとに、接続するすべてのノードをキューに入れます
スタックの構造を通して、段階的に深く掘り下げます
""""
Pseudocode[edit]
Input: A graph G and a vertex v of G
Output: All vertices reachable from v labeled as discovered
A recursive implementation of DFS:[5]
1 procedure DFS(G,v):
2 label v as discovered
3 for all edges from v to w in G.adjacentEdges(v) do
4 if vertex w is not labeled as discovered then
5 recursively call DFS(G,w)
A non-recursive implementation of DFS:[6]
1 procedure DFS-iterative(G,v):
2 let S be a stack
3 S.push(v)
4 while S is not empty
5 v = S.pop()
6 if v is not labeled as discovered:
7 label v as discovered
8 for all edges from v to w in G.adjacentEdges(v) do
9 S.push(w)
"""
def DFS(G,v0):
S = []
S.append(v0)
label = set()
while S:
v = S.pop()
if v not in label:
label.add(v)
procedure(v)
for w in G[v]:
S.append(w)
読んでいただきありがとうございます
。大学でpythonを学ぶことを選んだとき、コンピュータの基礎がおかしいことに気付きました。学業資格はあり
ませんでした。これは何もする必要はありません。それを補うことしかできません。道は、Pythonのコア知識を学び続け、コンピューターの基礎の詳細な研究を整理し、平凡になりたくない場合は、コーディングに参加して成長を続けてください!
実は、ここには技術だけでなく、それ以外のものもあり、例えば「絹糸」というよりも、どうやってプログラマーとして絶妙な存在になるのか、プログラマー自体が高貴な存在ですね。[参加するにはクリックしてください]自分らしくなりたい、高貴になりたい、さあ