THÔNG TIN TÀI LIỆU
Ngày đăng: 21/12/2017, 19:24
Xem thêm:
TỪ KHÓA LIÊN QUAN
Mục lục
CHƯƠNG I: THIẾT KẾ GIAO DIỆN
CHƯƠNG 2.THUẬT TOÁN GIẢI QUYẾT BÀI TOÁN - THUẬT TOÁN DIJKSTRA
Ðể cài đặt giải thuật dễ dàng, ta giả sử các đỉnh của đồ thị được đánh số từ 1 đến n và đỉnh nguồn là đỉnh
procedure Dijkstra; begin S := [1] ; { S chỉ chứa đỉnh nguồn } for i:=2 to n do D[i] := C[1, i] ; { Khởi đầu các giá trị cho D } for i:=1 to n - 1 do begin Lấy đỉnh w trong V - S sao cho D[w] là nhỏ nhất ; Thêm w vào S ; for mỗi đỉnh u thuộc V - S do D[u] := Min (D[u], D[w] + C[w, u]) ; end; end; <!--[if !supportLineBreakNewLine]--> <!--[endif]-->
Nếu muốn lưu trữ lại các đỉnh trên đường đi ngắn nhất để có thể xây dựng lại đường đi này từ đỉnh nguồn đến các đỉnh khác, ta dùng một mảng P. Mảng này sẽ lưu P[u] = w với đỉnh u là đỉnh trước của đỉnh w trên đường đi ngắn nhất. Lúc khởi đầu ta cho P[u] = 1, với mọi u khác 1. Giải thuật Dijkstra ở trên sẽ được viết lại như sau : <!--[if !supportLineBreakNewLine]--> <!--[endif]-->
procedure Dijkstra ; begin S := [1] ; { S chỉ chứa đỉnh nguồn } for i:=2 to n do begin D[i] := C[1, i] ; { Khởi đầu các giá trị cho D } P[i] := 1 ; { Khởi đầu các giá trị cho P } end ; for i:=1 to n - 1 do begin Lấy đỉnh w trong V - S sao cho D[w] là nhỏ nhất ; Thêm w vào S ; for mỗi đỉnh u thuộc V - S do if (D[w] + C[w, u] < D [u]) then begin D[u] := D[w] + C[w, u] ; P[u] := w ; end ; end; end; 3/Ví dụ :
Áp dụng giải thuật Dijkstra cho đồ thị hình sau: <!--[if !supportLineBreakNewLine]-->
d[i]:=c[u0,i];{Neu khong co duong di thi d[i]=i’}
k:=1;{Da ket nap duoc 1 dinh}
for i:=1 to n do
TÀI LIỆU CÙNG NGƯỜI DÙNG
TÀI LIỆU LIÊN QUAN