CHƢƠNG 1 : CƠ SỞ LÝ THUYẾT
2.1 Bài toán tìm đƣờng đi trong đồ thị hệ thống
2.1.4 Thuật toán tìm tất cả các đƣờng đi trong ma trận liên kết
a. Trƣờng hợp đồ thị cần biểu diễn là vô hƣớng: Có thể đƣợc biểu diễn một cách đơn giản bằng ma trận kề vuông cấp n, với n là số đỉnh của đồ thị. Phần tử δij ở hàng i cột j (i,j=0,1,2, ...n) đƣợc xác định nhƣ sau:
- δij =1 nếu cặp đỉnh xi và xj có cạnh nối với nhau.
- δij =0 nếu cặp đỉnh xi và xj không có cạnh nào nối với nhau. Bằng cách trên ta sẽ nhận đƣợc ma trận biểu diễn đồ thị đã cho.
Ma trận của đồ thị vô hƣớng là ma trận đối xứng, tức là các phần tử đối xứng qua đƣờng chéo chính sẽ tƣơng ứng bằng nhau.
b. Trƣờng hợp đồ thị cần biểu diễn là có hƣớng: Có thể đƣợc biểu diễn một cách đơn giản bằng ma trận kề vuông cấp n, với n là số đỉnh của đồ thị. Phần tử δij ở hàng i cột j (i,j=0,1,2, ...n) đƣợc xác định nhƣ sau:
- δij =1 nếu cặp đỉnh (xi, xj ) có cung.
- δij =0 nếu cặp đỉnh (xi, xj ) không có cung nào.
Ma trận của đồ thị có hƣớng không phải là ma trận đối xứng. Chú ý: Ma trận biểu diễn đồ thị đơn là ma trận logic.
Thuật toán để tìm tất cả các đƣờng đi trong ma trận kề dựa trên thao tác nhân ma trận liên kết một cột tƣơng ứng của ma trận đó đƣợc thể hiện nhƣ sau:
Bk = A* B*k- 1(*) Trong đó:
- Bk cột ma trận kết quả của phép nhân (*). - B*k- 1 là kết quả của phép chuyển đổi B k- 1 ;
Vậy bài toán đặt ra ở đây là cho ma trận A và ma trận cột B1 hãy tìm tất cả các đƣờng đi có thể có từ nguồn (điểm phát) tới đích (điểm nhận).
+) Bƣớc 1: K=1
If i_end == i_stok
+) Bƣớc 2: k=2.
+) Bƣớc 3: Thực hiện phép nhân A* B*k- 1 . +) Bƣớc 4: if i=i_end
Lƣu đƣờng đi vào ma trận K B[i_end][i] =0 +) Bƣớc 5: if B*k =0 Thực hiện tiếp bƣớc 7 if B*k ≠0 Thực hiện tiếp bƣớc 6 +) Bƣớc 6: if k < n-1 k++ Thực hiện tiếp bƣớc 3 If k = n-1 Thực hiện tiếp bƣớc 7 +) Bƣớc 7: Ma trận K lƣu các đƣờng đi tìm đƣợc. +) Bƣớc 8: Kết thúc