Thiết kế chương trình

Một phần của tài liệu ỨNG DỤNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI CÁC BÀI TOÁN TỐI ƯU TỔ HỢP 10600755 (Trang 29 - 32)

5. Bố cục đề tài

2.1.4. Thiết kế chương trình

B1: Khởi tạo mảng binary hai chiều với số dòng và số cột lần lượt là m, n và

giá trị các phần tử tương ứng là các số ở dòng m và các cột n tiếp theo được đọc vào từ file Robot.inp.

B2: Khởi tạo mảng decimal hai chiều với số dòng và số cột lần lượt là m, n

- Các phần tử ở dòng 0 và cột 0 được khởi tạo giá trị là -1.

- Phần tử ở dòng 1, cột 0 hoặc dòng 0, cột 1 được khởi tạo giá trị là 0. - Các phần tử còn lại được tính như sau:

For i từ 1 đến m For j từ 1 đến n

If decimal[i - 1][j] >= decimal[i][j - 1]

decimal[i][j] = decimal[i - 1][j] x 2 + binary[i][j]

Else

decimal[i][j] = decimal[i][j - 1] x 2 + binary[i][j]

B3: Ghi giá trị phần tử decimal[m][n] (giá trị thập phân của độ dài đường đi

tạo thành số nhị phân lớn nhất) vào file Robot.out.

B4: Truy vết, sử dụng thuật toán đệ quy theo phần tử (m, n) thuộc mảng

decimal.

If m = 1 và n = 1

Ghi m, n vào file Robot.out.

Else

If giá trị phần tử (m – 1, n) > giá trị phần tử (m, n -1)

Đệ quy theo phần tử (m – 1, n)

Đệ quy theo phần tử (m, n – 1) Ghi m, n vào file Robot.out.

Kết thúc. 2.1.5. Ví dụ

Ta có mảng binary gồm 6 dòng, 8 cột với các phần tử được đọc vào từ file Robot.inp:

Khởi tạo mảng decimal gồm 6 dòng, 8 cột với:

- Các phần tử ở dòng 0 và cột 0 được khởi tạo giá trị là – 1.

- Phần tử ở dòng 1, cột 0 hoặc dòng 0, cột 1 được khởi tạo giá trị là 0. - Các phần tử còn lại được khởi tạo theo công thức:

decimal[i][j] = max(decimal[i - 1][j], decimal[i][j - 1]) x 2 + binary[i][j]

0 1 2 3 4 5 6 7 0 1 1 0 0 1 1 0 1 2 0 1 0 1 0 1 1 3 1 0 1 0 0 1 0 4 0 1 0 1 1 0 0 5 1 0 1 0 1 0 1

Đệ quy để tìm đường đi tạo thành số nhị phân lớn nhất từ phần tử (5, 7). - Xét ô (4, 7) < ô (5, 6) (684 < 686), tiếp tục đệ quy theo phần tử (5, 6). - Xét ô (4, 6) < ô (5, 5) (342 < 343), tiếp tục đệ quy theo phần tử (5, 5). - Xét ô (4, 5) > ô (5, 4) (171 > 170), tiếp tục đệ quy theo phần tử (4, 5). Tiếp tục quá trình và dừng lại tại phần tử (1, 1).

=> Đường đi của Robot tạo thành số nhị phân lớn nhất: (1, 1), (1, 2), (2, 2), (2, 3), (2, 4), (3, 4), (4, 4), (4, 5), (5, 5), (5, 6), (5, 7).

Một phần của tài liệu ỨNG DỤNG PHƯƠNG PHÁP QUY HOẠCH ĐỘNG ĐỂ GIẢI CÁC BÀI TOÁN TỐI ƯU TỔ HỢP 10600755 (Trang 29 - 32)

Tải bản đầy đủ (PDF)

(70 trang)