Bài giảng Lý thuyết đồ thị: Chương 5 - Ngô Hữu Phúc

13 73 0
Bài giảng Lý thuyết đồ thị: Chương 5 - Ngô Hữu Phúc

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lý thuyết đồ thị - Chương 5: Tìm đường đi ngắn nhất trình bày về giới thiệu về bài toán, thuật toán gán nhãn, thuật toán Dijkstra.

CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • Trong phần này, giới thiệu giải thuật tìm đường ngắn đỉnh đồ thị có trọng số • Nội dung gồm: – 5.1 Giới thiệu toán – 5.2 Thuật toán gán nhãn – 5.3 Thuật tốn Dijkstra 80 CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • 5.1 Giới thiệu toán – Xét đồ thị G =< V, E > với V = n, E = m – Với cạnh u, v ∈ E, có giá trị trọng số A u, v – Đặt A u, v = ∞ u, v ∉ E – Nếu dãy v0, v1, , vk đường G – ∑ki=1 A vi−1 , vi – gọi độ dài đường – Bài tốn: Tìm đường ngắn từ đỉnh s đến đỉnh t đồ thị G 81 CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • 5.2 Thuật tốn gán nhãn (1/4) – Thuật tốn mơ tả sau: – Từ ma trận trọng số A[u,v], u,v∈V, tìm cận d[v] khoảng cách từ s đến tất đỉnh v∈V – Nếu thấy d[u] + A[u,v] < d[v] d[v] = d[u] + A[u, v] (làm tốt lên giá trị d[v]) – Quá trình kết thúc khơng thể làm “tốt lên” – Khi d[v] cho ta giá trị ngắn từ đỉnh s đến đỉnh v – Giá trị d[v] gọi nhãn đỉnh v 82 CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • 5.2 Thuật tốn gán nhãn (2/4) – Ví dụ thuật tốn: – Tìm đường ngắn từ A đến Z đồ thị G sau 83 CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • 5.2 Thuật tốn gán nhãn (3/4) – Các bước thực giải thuật: – Bước 1: Gán cho nhãn đỉnh A 0, d A = 0; – Bước 2: Chọn cạnh có độ dài nhỏ xuất phát từ A (cạnh AC), gán nhãn đỉnh kề C với: d C = d A + A A, C = + = 84 CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • 5.2 Thuật toán gán nhãn (3/4) – Bước 3: Tiếp đó, số cạnh từ đỉnh có nhãn A C tới đỉnh chưa gán nhãn, chọn cạnh cho: nhãn đỉnh + với trọng số cạnh tương ứng = nhỏ gán cho nhãn đỉnh cuối cạnh • • • • Như vậy, ta gán nhãn sau: d[B] = d[B] d[u] + A[u,v]) { d[v] = d[u] + A[u,v]; truoc[v] =u; } } } } 88 CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • 5.3 Thuật tốn Dijkstra (3/6) – Ví dụ giải thuật Dijkstra: – Cho đồ thị G trên, tìm đường từ 1->6 – Các bước thực Bước lặp Đỉnh Đỉnh Đỉnh (∗) Đỉnh Đỉnh Đỉnh Khởi tạo 0,1 4,1 2,1 (∗) ∞,1 ∞,1 ∞,1 - 3,3 (∗) - 10,3 12,3 ∞,1 - - - 8,2 (∗) 12,3 ∞,1 - - - - 10,4 (∗) 14,4 - - - - - 13,5 (∗) - - - - - 89 CHƯƠNG V TÌM ĐƯỜNG ĐI NGẮN NHẤT • 5.3 Thuật tốn Dijkstra (4/6) – Chương trình minh họa giải thuật Dijkstra: #include "conio.h" #include "io.h" #include "iostream" using namespace std; #define MAX 100 #define TRUE #define FALSE int n, s, z; char chon; int truoc[MAX],d[MAX],G[MAX][MAX]; int final[MAX]; void Init(void){ FILE * fp; int i, j; fp = fopen("dothi.in","r"); fscanf(fp,"%d", &n); cout

Ngày đăng: 24/09/2020, 04:24

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan