Thuật toán Dijkstra tìm đường đi ngắn nhất bằng bảng ghi nhãn

Thảo luận trong 'Khoa Khoa Học Máy Tính' bắt đầu bởi trungqn1, 30 Tháng mười một 2010.

  1. Offline

    trungqn1

    • Friends

    Số bài viết:
    390
    Đã được thích:
    162
    Điểm thành tích:
    240
    Mình minh họa thuật toán này trên Pascal

    procedure Dijkstra;
    (* Đầu vào: Đồ thị có hướng G=(V,E) với n đỉnh,
    S thuộc V là đỉnh xuất phát, a[u,v],u,v thuộc V, ma trận trọng số;
    Giả thiết: a[u,v]>=0, u,v thuộc V.
    Đầu ra: Khoảng cách từ đỉnh s đến tất cả các đỉnh còn lại d[v],v thuộc V.
    Truoc[v],v thuộc V, ghi nhận đinh trước v trong đường đi ngắn nhất từ s đến v.
    *)
    begin
    (* Khởi tạo *)
    for v thuộc V đo
    begin
    d[v]:=a[s,v];
    Truoc[v]:=s;
    end;
    d:=0; T:=V \ {s}; (* T là tập các đỉnh có nhãn tạm thời *)
    (* Bước lặp *)
    while T khác rỗng do
    begin
    Tìm đỉnh u thuộc T thỏa mãn d=min { d[z] : z thuộc T};
    T :=T \ {u}; (* Cố định nhãn của đỉnh u *)
    for v thuộc T do (* Gán nhãn lại cho các đỉnh trong T *)
    if d[v] > d + a[u,v] then
    begin
    d[v]:=d + a[u,v];
    Truoc[v]:=u;
    end;
    end;
    end;

    chúc các bạn thành công.
    interpol, chickenkoncongthangitvn thích bài này.

Chia sẻ trang này

Advertising: Linux system admin | nukeviet | nukeviet 4 | Upload ảnh miễn phí