Bài toán trò chơi 8 số
Trong bảng ô vuông 3 hàng, 3 cột , mỗi ô chứa một số nằm trong phạm vi từ 1 đến 8 sao cho không có 2 ô có cùng giá trị, có một ô trong bảng bị trống (không chứa giá trị nào cả. Xuất phát từ một sắp xếp nào đó các số trong bảng, hãy dịch chuyển ô trống sang phải, sang trái, lên trên hoặc xuống dưới (nếu có thể được) để đưa về bảng ban đầu về bảng qui ước trước. Chẳng hạn Hình 1. dưới đây là bảng xuất phát và Hình 2. là bảng mà ta phải thực hiện các bước di chuyển ô trống để đạt được.
2 |
8 |
3 |
1 |
6 |
4 |
7 |
|
5 |
Hình 2.1- Trạng thái ban đầu
1 |
2 |
3 |
8 |
|
4 |
7 |
6 |
5 |
Hình 2.2 Trạng thái kết thúc
Giá trị các phần tử trong bảng xác định trạng thái bài toán. Vì vậy có thể mô tả trạng thái của bài toán bằng một ma trận A3*3= (aij) , aijÎ{0..8}, aij < > akl, "i<>k, j<> l
- Biểu diễn theo một hàm
Gọi hàm fu là hàm biểu diễn cho toán tử chuyển ô trống lên trên; gọi B (B= (bij)) là trạng thái sau khi di chuyển ô trống ở trạng thái A (A= (aij)) lên trên, nghĩa là: B= fu(A), giả sử ô trống đang ở vị trí (i0, j0) (hay nói cách khác ai0 j0 = 0) thì hàm f được xác định như sau:
aij "(i, j) nếu i0 = 1
fu(aij) = aij nếu (i, j) ¹(i0-1, j0) và (i, j) ¹(i0, j0) và i0 >1
ai0-1, j0 nếu (i, j) = (i0, j0), i0 >1
ai0, j0 nếu (i, j) = (i0-1, j0), i0 >1
Tương tự, có thể xác định các phép chuyển ô trống xuống dưới fd, qua trái fl, qua phải fr như sau:
aij "(i, j) nếu i0 = 3
fd(aij) = aij nếu (i, j) ¹(i0+1, j0) và (i, j) ¹(i0, j0) và i0 <3
ai0-1, j0 nếu (i, j) = (i0, j0), i0 <3
ai0, j0 nếu (i, j) = (i0+1, j0), i0 <3
aij "(i, j) nếu j0 = 1
fl(aij) = aij nếu (i, j) ¹(i0, j0-1) và (i, j) ¹(i0, j0) và j0 > 1
ai0-1, j0 nếu (i, j) = (i0, j0), j0 > 1
ai0, j0 nếu (i, j) = (i0, j0-1), j0 > 1
aij "(i, j) nếu j0 = 3
fr(aij) = aij nếu (i, j) ¹(i0, j0+1) và (i, j) ¹(i0, j0) và j0 < 3
ai0-1, j0 nếu (i, j) = (i0, j0), j0 < 3
ai0, j0 nếu (i, j) = (i0, j0+1), j0 < 3
» Tin mới nhất:
» Các tin khác: