Giải thuật Dijkstra (tìm đường đi ngắn nhất từ một đỉnh nguồn)
Dữ liệu:
Ý tưởng
Giải thuật:
Bước 1: Khởi tạo: Với mỗi đỉnh u: dist[u] = vô cùng parent[u] = -1
dist[s] = 0
Bước 2: Tạo một tập các đỉnh chưa xét (ban đầu gồm tất cả các đỉnh)
Bước 3: Lặp cho đến khi tập chưa xét rỗng:
Chọn đỉnh u chưa xét sao cho dist[u] là nhỏ nhất
Đánh dấu u là đã xét
Với mỗi đỉnh v kề với u: Nếu v chưa xét và: dist[v] > dist[u] + trọng số(u, v) thì
Cập nhật: dist[v] = dist[u] + trọng số(u, v) parent[v] = u
Bước 4: Sau khi kết thúc: dist[v] là độ dài đường đi ngắn nhất từ s đến v parent dùng để truy vết đường đi
***Muốn tìm đường đi từ s đến v:
Bắt đầu từ v: Lần lượt đi ngược qua parent[v]
Dừng khi gặp s
Đảo ngược lại để được đường đi đúng