最短路徑范例
最短路徑問題是一個經典的圖論問題,它涉及到找到從一個給定的起始節點到目標節點的最短路徑。這個問題有許多不同的變體和算法來解決它,下面是一個簡單的示例,展示了如何找到一個圖的最短路徑。
假設我們有一個簡單的圖,它代表了一個城市中的街道網路,如圖所示:
A --+-- B --+-- C
| | |
D --+-- E --+-- F
我們想要找到從A到F的最短路徑。最短路徑算法會遍歷圖中的所有邊,計算出從起始節點到目標節點的所有可能路徑的長度,並選擇最短的一個。
在這個例子中,從A到F的最短路徑是 A -> B -> E -> F,總長度為2 + 2 + 2 = 6。
下面是一個簡單的Python程式,它使用廣度優先搜尋(BFS)來找到最短路徑:
import queue
class Graph:
def __init__(self, vertices):
self.V = vertices # 頂點數
self.graph = [[] for _ in range(vertices)]
def addEdge(self, u, v, w):
self.graph[u].append((v, w))
def BFS(self, src, dest):
queue = queue.Queue()
dist = [float('inf')] * self.V
dist[src] = 0
queue.put(src)
while not queue.empty():
cur = queue.get()
for i in range(len(self.graph[cur])):
adj, weight = self.graph[cur][i]
if dist[adj] > dist[cur] + weight:
dist[adj] = dist[cur] + weight
queue.put(adj)
print(dist)
return dist[dest] if dist[dest] != float('inf') else -1
# 創建圖
g = Graph(6)
g.addEdge(0, 1, 1)
g.addEdge(0, 2, 2)
g.addEdge(1, 3, 2)
g.addEdge(1, 4, 1)
g.addEdge(2, 3, 1)
g.addEdge(2, 5, 2)
g.addEdge(3, 5, 1)
# 找到最短路徑
print(g.BFS(0, 5))
這個程式定義了一個圖類,它有一個鄰接列表表示圖的結構。然後,它使用廣度優先搜尋來找到從0(A)到5(F)的最短路徑。程式的輸出應該是6,這是A到F的最短路徑長度。