Bfs如何找出起點與終點間的最短距離
BFS(廣度優先搜尋)是一種圖算法,可以用來找出圖中兩個節點之間的最短路徑。以下是使用BFS找出圖中兩個節點之間最短路徑的步驟:
- 初始化一個隊列,用來存放待訪問的節點。
- 將起始節點放入隊列中,並設置一個訪問標記來跟蹤已經訪問過的節點。
- 重複以下步驟直到隊列變空或者找到終點節點:
- 從隊列中取出一個節點。
- 如果該節點未被訪問過,將其標記為訪問過,並將其所有未訪問的鄰居節點放入隊列中。
- 如果取出的節點是終點節點,則停止算法,並返回成功找到最短路徑。
以下是一個簡單的Python實現:
from collections import deque
def bfs(graph, start, end):
# 初始化隊列和訪問標記
queue = deque([start])
visited = set()
# 開始BFS
while queue:
current = queue.popleft()
if current not in visited:
visited.add(current)
if current == end:
return True
for neighbor in graph[current]:
if neighbor not in visited:
queue.append(neighbor)
return False
# 示例圖形
graph = {
'A': ['B', 'C'],
'B': ['D', 'E'],
'C': ['F'],
'D': ['G'],
'E': ['H'],
'F': [],
'G': [],
'H': []
}
# 開始BFS
if bfs(graph, 'A', 'H'):
print("最短路徑存在")
else:
print("沒有從起點到終點的路徑")
在上面的示例中,我們定義了一個圖形graph
,然後使用BFS算法從節點'A'
開始尋找到節點'H'
的最短路徑。如果找到了這樣的路徑,算法會返回True
,否則返回False
。
請注意,這個算法假設圖形是無向的,並且邊的權重都是1。如果圖形是有向的或者邊有不同的權重,你可能需要對算法進行相應的修改。