You are on page 1of 3

Tài liệu hướng dẫn thực hành

CÀI Đ T THU T TOÁN AKT CHO BÀI TOÁN TACI

1. Cấu trúc dữ liệu

typedef struct {
char Taci[MAX][MAX];
int DongTrong, CotTrong;
int TrangThai;
int DinhTruoc;
int g, h;
}DINH;

DINH O[MAX];
int nO;

Ý nghĩa:

Ü O: Là tập các đỉnh trên cây tìm kiếm.


Ü nO: Số lượng đỉnh trên cây tìm kiếm.
Ü DINH. Taci: Ma trận Taci ở nút hiện tại.
Ü DINH. DongTrong, CotTrong: Dòng trống và cột trống trên ma trận taci ở mỗi đỉnh.
Ü DINH.TrangThai:
= 0 : Nếu là đỉnh mở.
= 1 : Nếu là đỉnh đóng.
Ü DINH. DinhTruoc: Trả về thứ tự của đỉnh trước đó.
Ü DINH. g, h: Lượng giá 1 đỉnh.

2. Hướng d n cài đ t

2.1 Hàm lượng giá

Dữ liệu vào: 1 đỉnh P trên cây tìm kiếm và ma trận đích


Dữ liệu ra: Giá trị H của đỉnh P.

int TinhH(DINH P, char Goal[MAX][MAX])


{
Trả về giá trị h của 1 đỉnh.
}

2.2 Hàm tìm kiếm

Dữ liệu vào: Trạng thái ban đầu Start và trạng thái đích Goal

void Solve(char Start[MAX][MAX], char Goal[MAX][MAX])


{
DINH O[MAXDINH];
int nO;
int Thoat;
// Thoat = 1: Tìm thành công.
// Thoat = 2: Tìm thất bại.

1
Tài liệu hướng dẫn thực hành
// Thoat = 3: Không có lời giải.
// Thoat = 0: Đang trong quá trình tìm kiếm

Khởi tạo mảng đỉnh O


O[0].Taci ← Start
O[0].DongTrong, O[0].CotTrong
O[0].DinhTruoc = -1
O[0].TrangThai = 0
O[0]. g = 0
O[0]. h = TinhH(O[0])
nO = 1
Thoat = 0;
while (Thoat == 0)
{
t = chỉ số đỉnh mở trong O có f (lấy g + h) nhỏ nhất.
Nếu không tìm được t thì
Thoat = 3
Thuật giải dừng, không có lời giải cho bài toán
Đóng đỉnh O[t]. (O[t].TrangThai = 1)
Gọi S1[0..k] là tập đỉnh sau O[t] không nằm trong O.
Với mỗi S1[i]: i=0..k
Nếu nO>MAX
Thoat = 2
Thuật giải dừng, không đủ không gian để tìm lời giải.
Đưa S1[i] vào O

O[nO-1] ← S1[i]
nO++

O[nO-1].TrangThai = 0
O[nO-1].DinhTruoc = t
Nếu S1[i] là đích thì
Nho = nO-1
Thoat = 1
Thuật giải dừng, thành công
}

Nếu Thoat = 1
Dựa vào thông tin đỉnh trước in ra các cách biến đổi
Ngược lại
Không tìm được lời giải
}

3. Mở rộng

Ü Dùng cấu trúc dữ liệu động (danh sách liên kết).


Xây dựng 1 template về danh sách liên kết, gọi là List
Định nghĩa lại cấu trúc dữ liệu:

typedef struct {
List <DINH> DinhSau;
DINH *DinhTruoc;
}CANH;

2
Tài liệu hướng dẫn thực hành
typedef struct {
char Taci[MAX][MAX];
int DongTrong, CotTrong;
int TrangThai;
int g, h;
List <CANH> Canh;
}DINH;

List <DINH> O

You might also like