Tải bản đầy đủ (.pdf) (25 trang)

BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NÂNG CAO ĐỀ TÀI: QUAY LUI VÀ SUDOK

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (540.58 KB, 25 trang )

lOMoARcPSD|15978022

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN

BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN
CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT NÂNG CAO

ĐỀ TÀI:

QUAY LUI VÀ SUDOKU
Sinh viên thực hiện

: NGUYỄN THẾ SINH
GIÁP ANH TÀI
NGUYỄN HẢI NAM
Giảng viên hướng dẫn : VŨ VĂN ĐỊNH
Ngành

: CƠNG NGHỆ THƠNG TIN

Chun ngành

:

Lớp

:

Khóa


: 2018 - 2023
Hà Nội, tháng 07 năm 2020

PHIẾU CHẤM ĐIỂM


lOMoARcPSD|15978022

STT

Họ và tên
sinh viên

1

Nguyễn Thế
Sinh

2

Giáp Anh
Tài

3

Nguyễn Hải
Nam

Họ và tên giảng viên


Nội dung thực hiện

Chữ ký

Điểm

Chữ


Ghi chú

Giảng viên chấm 1:

Giảng viên chấm 2:

MỤC LỤC
PHIẾU CHẤM ĐIỂM
MỤC LỤC
DANH MỤC HÌNH ẢNH
LỜI MỞ ĐẦU
NỘI DUNG THỰC HIỆN..........................................................................1
Chương 1. Giới thiệu bài toán thực hiện....................................................1


lOMoARcPSD|15978022

1.1 Giới thiệu về bài toán sudoku...............................................................1
1.2 Giới thiệu về kỹ thuật quay lui.............................................................2
1.2.1 Giải thích...........................................................................................2
1.2.2 Cài đặt................................................................................................3

1.2.3 Heuristic.............................................................................................3
1.2.4 Tư tưởng của thuật tốn.....................................................................4
1.2.5 Ví dụ..................................................................................................4
1.2.6 Phương pháp......................................................................................5
1.2.7 Mơ tả..................................................................................................5
1.3 Kết luận.................................................................................................7
1.3.1 Về bài toán sudoku............................................................................7
1.3.2 Về kỹ thuật quay lui...........................................................................7
Chương 2. Phân tích bài tốn.....................................................................8
2.1. Phân tích bài tốn................................................................................8
2.2 Giải thuật cho bài toán..........................................................................9
2.2.1 Giải thuật cho bài toán.......................................................................9
2.2.2 Tổ chức chương trình.........................................................................9
2.2.3 Các hàm giải....................................................................................10
2.3 Cấu trúc dữ liệu sử dụng.....................................................................10
Chương 3. Cài đặt, đánh giá thử nghiệm..................................................12
3.1 Giới thiệu về chương trình..................................................................12
3.2 Các thành phần của chương trình.......................................................13
3.2.1 Thành phần hiển thị và nhập bảng sudoku......................................13
3.2.2 Bảng đếm số lượng chưa nhập........................................................14
3.2.3 Nút giải............................................................................................15
3.3 Một số hình ảnh khi chạy chương trình..............................................15
3.4 Kết luận...............................................................................................18
KẾT LUẬN..............................................................................................19
DANH MỤC TÀI LIỆU THAM KHẢO..................................................20

DANH MỤC HÌNH ẢNH
Hình 1.1: Ví dụ sudoku...............................................................................2
Hình 1.2: Ví dụ cây quay lui.......................................................................6
Hình 2.1: Input Sudoku..............................................................................8

Hình 2.2: Output Sudoku............................................................................8
Hình 3.1: Giao diện chính.........................................................................12


lOMoARcPSD|15978022

Hình 3.2: Giao diện nhập..........................................................................13
Hình 3.3: Bảng đếm số cịn lại.................................................................14
Hình 3.4: Bảng đếm số cịn lại khi hoạt động..........................................14
Hình 3.5: Nút giải.....................................................................................15
Hình 3.6: Giao diện chính khi được nhập.................................................15
Hình 3.7: Giao diện giải thành cơng.........................................................16
Hình 3.8: Giao diện thơng báo bảng đã giải.............................................16
Hình 3.9: Giao diện thơng báo lỗi............................................................17
Hình 3.10: Giao diện bảng khi giải thành cơng........................................17
Hình 3.11: Giao diện không thể giải.........................................................18


lOMoARcPSD|15978022

Môn học Cấu trúc dữ liệu và giải thuật nâng cao cung cấp những
kiến thức về các chiến lược, các kỹ thuật, cấu trúc dữ liệu phức tạp. Với
những kiến thức đã đạt được trong q trình học tập, nhóm chúng em sẽ
vận dụng vào đề tài giải bài toán đố sudoku với kỹ thuật quay lui.
Đề tài Quay lui và sudoku này sẽ sử dụng ba ngôn ngữ html css
javascript thuần để biểu diễn kỹ thuật quay lui với cơng cụ lập trình là
Visual Studio Code 2020, với trình quản lý phiên bản là Git, chạy bởi
node package là live-server khi offline. Chương trình sẽ được deploy lên
GitHub và chạy online với tên miền:
Nhóm chúng em xin cảm ơn thầy Vũ Văn Định đã tận tình truyền

đạt kiến thức trong quá trình học tập cũng như quá trình làm chuyên đề.


lOMoARcPSD|15978022

NỘI DUNG THỰC HIỆN
Chương 1. Giới thiệu bài toán thực hiện
1.1 Giới thiệu về bài tốn sudoku
Trị chơi này được kiến trúc sư Howard Garns ở New York thiết kế và
được giới thiệu lần đầu tiên vào năm 1979 trên tạp chí Dell (Mỹ)
với tên gọi là "Number Place". Tháng 4/1984, Number Place lần đầu
tiên được giới thiệu tại Nhật trên báo Monthly Nikolist với tên gọi "Suuji
wa dokusinh ni kagiru", dịch sang tiếng Anh có nghĩa là "những con số
phải độc nhất" hoặc "những con số tìm thấy chỉ một lần" và được "rút
gọn" thành sudoku (su = number, doku = single). Nhưng trò chơi này chỉ
trở nên phổ biến khi người Anh nhập cuộc. Báo Times số ngày
12/11/2004 đã giới thiệu nó với tên gọi “sudoku” dựa trên kết quả phát
triển chương trình trị chơi trên máy vi tính của một quan tịa về hưu
người New Zealand sống ở Hongkong tên là Wayne Gould. Sau đó,
sudoku lần lượt xuất hiện trên hầu hết các tờ báo hàng đầu của Anh và
được "đưa" đến Australia nhờ tập đoàn báo chí Telegarph. Từ ngày
2/8/2005, chương trình Radio Times của đài BBC (Anh) có một chuyên
đề hằng tuần về sudoku mang tên Super sudoku. sudoku đã xuất hiện trên
tivi lần đầu tiên vào ngày 1/7/2005 trong chương trình sudoku Live trên
kênh Sky One. Đây là một cuộc thi gồm 9 đội (mỗi đội 8 người cùng với
một nhân vật nổi tiếng) tranh tài với nhau, tạo nên bảng sudoku lớn nhất
thế giới (rộng 84 m với 1905 giải pháp đúng), câu đố được khắc trên một
sườn đồi ở Chipping Sodbury nước Anh. Hiện nay, sudoku đã có mặt trên
các báo, tạp chí hàng đầu và trở thành trị chơi gây sốt tại hơn 40 quốc gia
và vùng lãnh thổ trên thế giới, trong đó có Việt Nam. sudoku xuất hiện tại

Việt Nam sớm nhất là trên tạp chí Khám Phá (Trực thuộc Sở Khoa học và
Cơng nghệ Thành phố Hồ Chí Minh), sau đó đến Thanh Niên, Hoa Học
Trị, được xem như là một hình thức giải trí đầy trí tuệ của giới trẻ. Đặc
biệt, mục Vua trò chơi trên báo Hoa Học Trị với "món chủ lực" là sudoku
thu hút rất đông học sinh tham gia (theo kết quả công bố của báo).
Quy luật của trò chơi tương đối đơn giản. Cho một bàn hình vng
được chia thành một lưới 81 ô nhỏ gồm 9 hàng và 9 cột, 81 ô nhỏ đó lại
được chia thành 9 vùng, mỗi vùng có 9 ơ. Đề bài sudoku là một bàn hình
vng như thế, trên đó tại một số ơ người ta đã điền sẵn một số giá trị.
1


lOMoARcPSD|15978022

Cách chơi như sau: Phải điền các số từ 1 đến 9 vào mỗi hàng dọc,
ngang không được trùng lặp. Ở mỗi hàng dọc, mỗi hàng ngang và mỗi ô
vuông 3*3 được phân cách bằng vạch đen đậm các số chỉ được sử dụng
một lần và khơng lặp lại.
Ví dụ như sau:

Hình 1.1: Ví dụ sudoku

1.2 Giới thiệu về kỹ thuật quay lui
Quay lui (tiếng Anh: backtracking) là một chiến lược tìm kiếm lời giải
cho các bài tốn thỏa mãn ràng buộc. Người đầu tiên đề ra thuật ngữ này
(backtrack) là nhà toán học người Mỹ D. H. Lehmer vào những năm
1950.
1.2.1 Giải thích
Các bài tốn thỏa mãn ràng buộc là các bài tốn có một lời giải đầy đủ,
trong đó thứ tự của các phần tử khơng quan trọng. Các bài toán này bao

gồm một tập các biến mà mỗi biến cần được gán một giá trị tùy theo các
ràng buộc cụ thể của bài toán. Việc quay lui là để thử tất cả các tổ hợp để
tìm được một lời giải. Thế mạnh của phương pháp này là nhiều cài đặt
tránh được việc phải thử nhiều tổ hợp chưa hồn chỉnh, và nhờ đó giảm
thời gian chạy. Phương pháp quay lui có quan hệ chặt chẽ với tìm kiếm tổ
hợp.
2


lOMoARcPSD|15978022

1.2.2 Cài đặt
Về bản chất, tư tưởng của phương pháp là thử từng khả năng cho đến
khi tìm thấy lời giải đúng. Đó là một q trình tìm kiếm theo độ sâu trong
một tập hợp các lời giải. Trong quá trình tìm kiếm, nếu ta gặp một hướng
lựa chọn khơng thỏa mãn, ta quay lui về điểm lựa chọn nơi có các hướng
khác và thử hướng lựa chọn tiếp theo. Khi đã thử hết các lựa chọn xuất
phát từ điểm lựa chọn đó, ta quay lại điểm lựa chọn trước đó và thử
hướng lựa chọn tiếp theo tại đó. Quá trình tìm kiếm thất bại khi khơng
cịn điểm lựa chọn nào nữa.
Quy trình đó thường được cài đặt bằng một hàm đệ quy mà trong đó
mỗi thể hiện của hàm lấy thêm một biến và lần lượt gán tất cả các giá trị
có thể cho biến đó, với mỗi lần gán trị lại gọi chuỗi đệ quy tiếp theo để
thử các biến tiếp theo. Chiến lược quay lui tương tự với tìm kiếm theo độ
sâu nhưng sử dụng ít khơng gian bộ nhớ hơn, nó chỉ lưu giữ trạng thái
của một lời giải hiện tại và cập nhật nó.
1.2.3 Heuristic
Để tăng tốc quá trình tìm kiếm, khi một giá trị được chọn, trước khi
thực hiện lời gọi đệ quy, thuật tốn thường xóa bỏ giá trị đó khỏi miền
xác định của các biến có mâu thuẫn chưa được gán (kiểm tra tiến forward checking) và kiểm tra tất cả các hằng số để tìm các giá trị khác

đã bị loại trừ bởi giá trị vừa được gán (lan truyền ràng buộc - constraint
propagation).
Người ta thường sử dụng một số phương pháp heuristic để tăng tốc cho
quá trình quay lui. Do các biến có thể được xử lý theo thứ tự bất kỳ, việc
thử các biến bị ràng buộc chặt nhất (nghĩa là các biến có ít lựa chọn về
giá trị nhất) thường có hiệu quả do nó tỉa cây tìm kiếm từ sớm (cực đại
hóa ảnh hưởng của lựa chọn sớm hiện hành).
Các cài đặt quay lui phức tạp thường sử dụng một hàm biên, hàm này
kiểm tra xem từ lời giản chưa đầy đủ hiện tại có thể thu được một lời giải
hay không, nghĩa là nếu đi tiếp theo hướng hiện tại thì liệu có ích hay
khơng. Nhờ đó, một kiểm tra biên phát hiện ra các lời giải dở dang chắc
chắn thất bại có thể nâng cao hiệu quả của tìm kiếm. Do hàm này hay
được chạy, có thể tại mỗi bước, nên chi phí tính tốn các biên cần tối
hiểu, nếu khơng, hiệu quả tồn cục của thuật tốn sẽ khơng được cải tiến.
3


lOMoARcPSD|15978022

Các hàm kiểm tra biên được tạo theo kiểu gần như các hàm heuristic
khác: nới lỏng một số điều kiện của bài toán.

 Nét đặc trưng của kĩ thuật quay lui là các bước hướng tới lời giải cuối
cùng của bài tốn hồn tồn được làm thử.
 Tại mỗi bước, nếu có một lựa chọn được chấp nhận thì ghi nhận lại
lựa chọn này và tiến hành các bước thử tiếp theo. Cịn ngược lại
khơng có lựa chọn nào thích hợp thì làm lại bước trước, xóa bỏ sự ghi
nhận và quay về chu trình thử các lựa chọn cịn lại.
 Điểm quan trọng của thuật toán là phải ghi nhớ tại mỗi bước đi qua để
tránh trùng lặp khi quay lui. Các thông tin này cần được lưu trữ vào

một ngăn xếp-Stack (vào sau ra trước), nên thuật toán thể hiện ý thiết
kế một cách đệ quy.
 Thuật toán quay lui thường được cài đặt theo lối đệ quy, mỗi lần gọi
hàm đệ quy, hàm đệ quy được truyền một tham số (trong các tham số)
là chỉ số của bài tốn con, trong hàm sẽ cố gắng tìm lời giải cho bài
tốn con đó, nếu tìm thấy thì gọi hàm đệ quy để giải bài toán con tiếp
theo hoặc là đưa ra đáp án bài toán lớn nếu đã đầy đủ lời giải, nếu
khơng tìm thấy thì chương trình sẽ trở về điểm gọi hàm đó. Mục đích
của việc sử dụng hàm đệ quy là để thuật toán được rỏ ràng, dễ viết, dễ
hiểu hơn và cũng để bảo tồn các biến, các trạng thái lúc giải bài tốn
con.
1.2.5 Ví dụ
Sử dụng chiến lược quay lui dùng để giải bài tốn liệt kê các cấu
hình. Mỗi cấu hình được xây dựng bằng cách xây dựng từng phần tử, mỗi
phần tử được chọn bằng cách thử tất cả các khả năng.
1.2.6 Phương pháp
Giả thiết cấu hình cần liệt kê có dạng (x1,x2,...,xn). Khi đó thuật
tốn quay lui được thực hiện qua các bước sau:
1) Xét tất cả các giá trị x1 có thể nhận, thử cho x1 nhận lần lượt các giá
trị đó. Với mỗi giá trị thử cho x1 ta sẽ:
4


lOMoARcPSD|15978022

2) Xét tất cả các giá trị x2 có thể nhận, lại thử cho x2 nhận lần lượt các
giá trị đó. Với mỗi giá trị thử gán cho x2 lại xét tiếp các khả năng
chọn x3 ... cứ tiếp tục như vậy đến bước:
n) Xét tất cả các giá trị xn có thể nhận, thử cho xn nhận lần lượt các giá
trị đó, thơng báo cấu hình tìm được (x1,x2,...,xn).

1.2.7 Mơ tả
Thuật tốn quay lui có thể được mơ tả bằng đoạn mã giả
(pseudocode) sau:
{Thủ tục này thử cho xi nhận lần lượt các giá trị mà nó có thể nhận}
procedure Try(i: Integer);
begin
for (mọi giá trị có thể gán cho xi) do
begin
<Thử cho xi := V>;
if (xi là phần tử cuối cùng trong cấu hình) then
<Thơng báo cấu hình tìm được>
else
begin
<Ghi nhận việc cho xi nhận giá trị V (Nếu cần)>;
Try(i + 1); {Gọi đệ qui để chọn tiếp xi + 1}
<Nếu cần, bỏ ghi nhận việc thử xi := V, để thử giá trị khác>;

5


lOMoARcPSD|15978022

end;
end;
end;

(Thuật toán quay lui sẽ bắt đầu bằng lời gọi Try(1);)
Ta có thể trình bày q trình tìm kiếm lời giải quả thuật tốn quay
lui bằng cây sau:


Hình 1.2: Ví dụ cây quay lui

1.3 Kết luận
1.3.1 Về bài toán sudoku
Đây là một bài tốn tuy đơn giản nhưng lại địi hỏi nhiều trí tuệ.
Thích hợp để rèn luyện khả năng tư duy. Và vơ cùng thích hợp để ứng
dụng quay lui để giải.
1.3.2 Về kỹ thuật quay lui

6


lOMoARcPSD|15978022

Ưu điểm: Việc quay lui là thử tất cả các tổ hợp để tìm được một lời
giải. Thế mạnh của phương pháp này là nhiều cài đặt tránh được việc phải
thử nhiều trường hợp chưa hồn chỉnh, nhờ đó giảm thời gian chạy.
Nhược điểm: Trong trường hợp xấu nhất độ phức tạp của quay lui vẫn
là cấp số mũ. Vì nó mắc phải các nhược điểm sau:
- Rơi vào tình trạng "thrashing": qúa trình tìm kiếm cứ gặp phải bế tắc với
cùng một nguyên nhân.
- Thực hiện các công việc dư thừa: Mỗi lần chúng ta quay lui, chúng ta
cần phải đánh giá lại lời giải trong khi đôi lúc điều đó khơng cần thiết.
- Khơng sớm phát hiện được các khả năng bị bế tắc trong tương lai. Quay
lui chuẩn, khơng có cơ chế nhìn về tương lai để nhận biết đc nhánh tìm
kiếm sẽ đi vào bế tắc.

Chương 2. Phân tích bài tốn
2.1. Phân tích bài tốn
 Input: Một bảng số được người dùng nhập trên nền giao diện (GUI).

Ví dụ người dùng sẽ nhập như sau:

7


lOMoARcPSD|15978022

Hình 2.1: Input Sudoku
 Output: Kết quả của bài tốn. Có thể sẽ có đáp án hoặc khơng có đáp
án. Sẽ được hiển thị như sau:

Hình 2.2: Output Sudoku

2.2 Giải thuật cho bài toán
2.2.1 Giải thuật cho bài toán
Bước 1. Lấy tất cả các số phù hợp với từng ô trống
8


lOMoARcPSD|15978022

Bước 2. Tạo tất cả các hàng có thể phù hợp trong hàng đầu tiên tùy
thuộc vào danh sách số phù hợp
Bước 3. Chọn một hàng từ danh sách hàng có thể và đặt nó vào hàng
đầu tiên
Bước 4. Đi đến hàng tiếp theo và tìm tất cả các số có thể phù hợp với
từng ơ
Bước 5. Tạo tất cả các hàng có thể phù hợp trong hàng này, sau đó
chuyển sang bước 3 cho đến khi đến hàng cuối cùng hoặc khơng cịn
hàng nào có thể cịn lại

Bước 6. Nếu hàng tiếp theo khơng cịn khả năng nào thì hãy chuyển
sang hàng trước và thử khả năng tiếp theo từ danh sách các hàng khả
năng
Bước 7. Nếu hàng cuối cùng đã đạt và một hàng thỏa mãn trong đó đã
tìm thấy thì bài tốn đã được giải quyết

2.2.2 Tổ chức chương trình
Chương trình sẽ được tổ chức theo dạng các hàm thủ tục với từng hàm
ứng với mỗi nhiệm vụ khác nhau. Chương trình sẽ được viết theo hướng
đơn giản nhất với 1giao diện chính để người dùng có thể tương tác ngay
lập tức.
Dự kiến giao diện chính sẽ gồm 1 bảng sudoku chính, 1 bảng đếm số
lượng và 1 nút chạy giải.

2.2.3 Các hàm giải
 function getColumns(grid) {}: trả về trả về 1 mảng các cột của bảng
sudoku
 function getBlocks(grid) {}: trả về giá trị của khối 3x3 trong bảng
sudoku
 function replaceCharAt(string, index, char) {}: thực hiện thay thế giá
trị tại 1 ô trong bảng
 function generatePossibleNumber(rows, columns, blocks) {}: Sinh ra
tất cả số thỏa yêu cầu để điền vào bảng sudoku
9


lOMoARcPSD|15978022

 function solveGrid(possibleNumber, rows, startFromZero) {}: Gọi
hàm nextStep() để giải bài tốn, trả về kết quả của bảng nếu có, khơng

trả về gì khi khơng giải được
 function
nextStep(level,
possibleNumber,
rows,
solution,
startFromZero) {}: là hàm chạy đệ quy, kiểm tra xem các giá trị tại 1
hàng có là duy nhất hay chưa và kiểm tra tính hợp lệ của giá trị trong
1 ơ. Trả về 1 nếu có đáp án, -1 nếu khơng có.
 function generatePossibleRows(possibleNumber) {}: Sinh ra hàng số
thỏa yêu cầu để điền vào bảng sudoku
 function ViewPuzzle(grid) {}: Đọc đầu vào của người dùng
 function readInput() {}: Đọc đầu vào hiện tại của người dùng
 function checkValue(value, row, column, block, defaultValue,
currectValue) {}: kiểm tra giá trị người dùng nhập
 function updateRemainingTable(){}:Hỗ trợ cập nhật giá trị của bảng
remaining
 function solveSudoku(changeUI) {}: thay đổi giao diện kết quả
 Function solveButtonClick() {} Gọi tất cả các hàm trên khi người
dùng bấm, thực thi việc giải bài toán

2.3 Cấu trúc dữ liệu sử dụng
Cấu trúc dữ liệu trong bài toán sẽ là dữ liệu kiểu mảng do người dùng
sẽ điền dữ liệu vào bảng sudoku
Một mảng chứa dữ liệu là bảng sudoku mà người dùng nhập vào:
let puzzle = [];
Một mảng chứa kết quả đầu ra là 1 bảng sudoku đã được giải:
let solution = [];
Một mảng dùng để đếm số lượng ứng với từng số chưa được người
dùng nhập:

let remaining = [9, 9, 9, 9, 9, 9, 9, 9, 9];
Ví dụ
puzzle = [[1,2,3,4,5,6,7,8,9]] nghĩa là người dùng nhập vào dòng đầu tiên
của bảng sudoku các giá trị là 1 ở ô thứ nhất, 2 ở ô thứ 2,… 9 ở ô thứ 9.
solution=[
[1,2,3,4,5,6,7,8,9],
10


lOMoARcPSD|15978022

[4,5,6,7,8,9,1,2,3],
[7,8,9,1,2,3,4,5,6],
[2,1,4,3,6,5,8,9,7],
[3,6,5,8,9,7,2,1,4],
[8,9,7,2,1,4,3,6,5],
[5,3,1,6,4,2,9,7,8],
[6,4,2,9,7,8,5,3,1],
[9,7,8,5,3,1,6,4,2]
] sẽ là đáp án cho bài toán của người dùng nhập. Tương ứng ở hàng đầu
tiên, giá trị 1 sẽ được điền vào ô đầu tiên thuộc hàng đầu tiên của bảng,
giá trị 2 sẽ được điền vào ô thứ hai của hàng đầu tiên của bảng, tiếp tục
tới số 2 của hàng cuối cùng sẽ được điền vào ô cuối cùng của hàng cuối
cùng.
remaining=[8,9,8,9,9,9,0,9,7] tức là người dùng đã điền vào bảng các giá
trị và trên bảng hiện có 1 giá trị 1, 1 giá 3, 2 giá trị 9, 9 giá trị 7.

Chương 3. Cài đặt, đánh giá thử nghiệm
3.1 Giới thiệu về chương trình
Chương trình sẽ có một giao diện chính duy nhất. Người dùng sẽ

nhập bảng sudoku thơng qua bảng trên màn hình. Bên trái sẽ có 1 bảng
đếm số lượng các số chưa được nhập. Trên cùng sẽ là nút giải bảng
sudoku. Chương trình nhắm tới mục tiêu là giải bài toán nhanh và chính
xác nhất.

11


lOMoARcPSD|15978022

Hình 3.1: Giao diện chính

3.2 Các thành phần của chương trình
3.2.1 Thành phần hiển thị và nhập bảng sudoku

12


lOMoARcPSD|15978022

Hình 3.2: Giao diện nhập

Đây là màn hình hiển thị đáp án cho sudoku. Các chức năng bao
gồm nút di chuyển là nút tab hoặc ta sẽ sử dụng chuột hỗ trợ cho quá
trình nhập dữ liệu.

13


lOMoARcPSD|15978022


3.2.2 Bảng đếm số lượng chưa nhập

Hình 3.3: Bảng đếm số còn lại
Bảng sẽ giúp đếm số lượng các số chưa được nhập. Ví dụ khi
người dùng nhập số 1 một lần thì số lượng của một chỉ cịn là 8:

Hình 3.4: Bảng đếm số cịn lại khi hoạt động

3.2.3 Nút giải

14


lOMoARcPSD|15978022

Hình 3.5: Nút giải
Khi người dùng bấm nút này sẽ chạy chương trình giải. Sau một
khoảng thời gian ngắn ( tối đa là hơn 3 giây) sẽ hiện ra thông báo giải
được và hiện đáp án

3.3 Một số hình ảnh khi chạy chương trình

Hình 3.6: Giao diện chính khi được nhập

15
Downloaded by Quang Quang ()




×