幅優先探索(BFS)は、グラフや木構造を探索するためのアルゴリズムです。このアルゴリズムは、まず根ノードを訪問し、その後、隣接するノードを訪問していくことによって、すべてのノードを層ごとに探索します。BFSは、最短経路や最小コストの探索に利用されることが多いです。
以下は、PythonによるBFSの実装例です。このコードは、隣接リストを用いてグラフを表現し、BFSを実行します。
from collections import deque
class Graph:
def __init__(self):
self.graph = {} # グラフの隣接リストを保持
def add_edge(self, u, v):
if u not in self.graph:
self.graph[u] = []
if v not in self.graph:
self.graph[v] = []
self.graph[u].append(v)
self.graph[v].append(u) # 無向グラフの場合は両方向にエッジを追加
def bfs(self, start):
visited = set() # 訪問済みノードを保持
queue = deque([start]) # キューにスタートノードを追加
visited.add(start)
while queue:
node = queue.popleft() # キューの先頭からノードを取得
print(node, end=' ') # 訪問したノードを表示
for neighbor in self.graph[node]: # 隣接ノードをループ
if neighbor not in visited: # 訪問していない場合
visited.add(neighbor) # 訪問済みに追加
queue.append(neighbor) # キューに追加
# グラフの生成とBFSの実行
if __name__ == "__main__":
g = Graph()
g.add_edge(1, 2)
g.add_edge(1, 3)
g.add_edge(2, 4)
g.add_edge(2, 5)
g.add_edge(3, 6)
g.add_edge(3, 7)
print("幅優先探索の結果:")
g.bfs(1) # スタートノードを1に設定
add_edge(u, v)
: 頂点uからvへのエッジを追加します。無向グラフのため、両方向にエッジを追加します。
bfsメソッド: 幅優先探索を実行するメソッドです。
visited
: 訪問済みのノードを管理するためのセットです。queue
: キューを使用して、次に訪問するノードを管理します。while queue
: キューが空でない限り、ノードを取り出して訪問します。このように、幅優先探索(BFS)は多くの実用的な用途があり、特にグラフやツリーの問題を解決するために非常に有用なアルゴリズムです。