Professional Documents
Culture Documents
1
Mô hình bài toán
2
Các bước giải quyết bài toán
• Ta tìm vị trí để đặt cho con hậu thứ i, với con hậu
thứ i thì ta phải xét xem trên các hướng của nó sau
đó tìm tiếp vị trí cho con hậu thứ i + 1.
• Nếu ở bước thứ i không tìm thấy vị trí đặt của con
hậu thì chúng ta phải quay lại xét đến vị trí khác của
con hậu thứ i – 1.
• Trường hợp suy biến của bài toán là khi chúng ta đã
đặt cho con hậu thứ 8 có nghĩa là cả 8 con hậu đã
được xếp trên bàn cờ và thoả mãn điều kiện là các
con hậu không thể ăn được nhau.
3
Bài toán tìm đường đi bằng chu
trình Hamilton
Giới thiệu bài toán: Một người khách du lịch
muốn đi thăm n thành phố được đánh số từ 1 đến
n. Mạng lưới giao thông giữa n thành phố này là
2 chiều và được cho bởi ma trận A[i,j] trong đó
A[i,j] = 1 nếu có đường đi giữa thành phố i và
thành phố j, A[i,j] = 0 trong trường hợp ngược lại.
Thiết lập đường đi cho người khách thông báo
tồn tại đường đi hoặc không tồn tại đường đi.
4
Mô hình bài toán
•Chúng ta có file có n + 1 dòng như sau:
– Dòng 1: Ghi số nguyên dương là n thành phố
– Dòng i + 1: (1≤i≤n): ghi n số nguyên không âm A[i,1] A[i,2]…
A[i,n] cho biết có đường đi hay không giữa hai thành phố i và j
(1≤j≤n).
•Kết quả tồn tại hay không tồn tại đường đi.
5
Kết quả:
0 0 1 1 1
0 0 1 1 1 Chu trình Hamilton như
1 1 0 1 1 sau:
1 1 1 0 1 1 3 2 4 5
1 1 1 1 0 1
5
Các bước giải quyết bài toán
6
Thủ tục mô tả thuật toán
Procedure Hamilton(k : byte);
var i : byte;
Begin
if k = n + 1 then
inkq
else
for i := 1 to n do
if (a[c[k-1],i] > 0) and not(b[i]) then
begin
a[c[k-1],i] := 0;
c[k] := i;
b[i] := true;
hamilton(k+1);
a[c[k-1],i] := 1;
c[k] := 0;
b[i] := false;
end;
End;
7