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).