1. Trang chủ
  2. » Công Nghệ Thông Tin

FULL Code đồ án lập trình Sudoku

23 48 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 23
Dung lượng 41,95 KB
File đính kèm Code.zip (9 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

1. Giới thiệu luật chơi và cách giải Sudoku Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau: Sudoku (数独すうどく (số độc) sūdoku?) (suːˈdoʊkuː, ˈdɒ, sə, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp. Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗi phần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc “vùng”) đều chứa tất cả các chữ số từ 1 tới 9. Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số. Mỗi câu đố được thiết lập tốt có một cách làm duy nhất. Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau: Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải Sudoku. Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa. Nội dung chínhShow Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy Bài viết tham khảo từ techwithtim.net 1. Giới thiệu luật chơi và cách giải Sudoku Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau: Sudoku (数独すうどく (số độc) sūdoku?) (suːˈdoʊkuː, ˈdɒ, sə, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp. Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗi phần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc “vùng”) đều chứa tất cả các chữ số từ 1 tới 9. Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số. Mỗi câu đố được thiết lập tốt có một cách làm duy nhất. Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau: 2. Thuật toán giải Sudoku Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình sử dụng là Python. Các bước tiến hành như sau: • Viết hàm in câu đố Sudoku ra màn hình. • Tìm vị trí các ô trống trong Sudoku. • Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó. Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không). Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo • Lặp lại quy trình trên cho đến khi không còn ô trống nào trên câu đố, hoặc không tìm được lời giải. Input, một câu đố sudoku biểu diễn bởi danh sách list 2 chiều (một danh sách gồm 9 phần tử, mỗi phần tử là dòng – lại là một danh sách gồm 9 phần tử tương ứng với 9 ô trong một dòng) với các ô trống được quy ước điền bởi số 0, ví dụ Sudoku cau_do được biểu diễn như sau: cau_do = 7,8,0,4,0,0,1,2,0, 6,0,0,0,7,5,0,0,9, 0,0,0,6,0,1,0,7,8, 0,0,7,0,4,0,2,6,0, 0,0,1,0,5,0,9,3,0, 9,0,4,0,6,0,0,0,5, 0,7,0,3,0,0,0,1,2, 1,2,0,0,0,7,4,0,0, 0,4,9,2,0,6,0,0,7 Chú ý rằng chỉ số index trong Python được đánh từ 0 trở đi, do đó các vị trí của từng ô trong bảng số sẽ là cau_d000 cho đến cau_do88, ở đây cau_dodc là ô số ở vị trí dòng d và cột c. 2.1. Viết hàm in câu đố Sudoku ra màn hình Ở đây chúng ta sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sẽ sử dụng hàm print() của Python để in một đối tượng ra màn hình CMD. Ta sẽ viết hàm in_sudoku để in một câu đố Sudoku có tên là q ra màn hình, sử dụng biến d và c để biểu diễn dòng và cột. Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải Sudoku. Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa. Nội dung chínhShow Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy Bài viết tham khảo từ techwithtim.net 1. Giới thiệu luật chơi và cách giải Sudoku Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau: Sudoku (数独すうどく (số độc) sūdoku?) (suːˈdoʊkuː, ˈdɒ, sə, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp. Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗi phần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc “vùng”) đều chứa tất cả các chữ số từ 1 tới 9. Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số. Mỗi câu đố được thiết lập tốt có một cách làm duy nhất. Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau: 2. Thuật toán giải Sudoku Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình sử dụng là Python. Các bước tiến hành như sau: • Viết hàm in câu đố Sudoku ra màn hình. • Tìm vị trí các ô trống trong Sudoku. • Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó. Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không). Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo • Lặp lại quy trình trên cho đến khi không còn ô trống nào trên câu đố, hoặc không tìm được lời giải. Input, một câu đố sudoku biểu diễn bởi danh sách list 2 chiều (một danh sách gồm 9 phần tử, mỗi phần tử là dòng – lại là một danh sách gồm 9 phần tử tương ứng với 9 ô trong một dòng) với các ô trống được quy ước điền bởi số 0, ví dụ Sudoku cau_do được biểu diễn như sau: cau_do = 7,8,0,4,0,0,1,2,0, 6,0,0,0,7,5,0,0,9, 0,0,0,6,0,1,0,7,8, 0,0,7,0,4,0,2,6,0, 0,0,1,0,5,0,9,3,0, 9,0,4,0,6,0,0,0,5, 0,7,0,3,0,0,0,1,2, 1,2,0,0,0,7,4,0,0, 0,4,9,2,0,6,0,0,7 Chú ý rằng chỉ số index trong Python được đánh từ 0 trở đi, do đó các vị trí của từng ô trong bảng số sẽ là cau_d000 cho đến cau_do88, ở đây cau_dodc là ô số ở vị trí dòng d và cột c. 2.1. Viết hàm in câu đố Sudoku ra màn hình Ở đây chúng ta sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sẽ sử dụng hàm print() của Python để in một đối tượng ra màn hình CMD. Ta sẽ viết hàm in_sudoku để in một câu đố Sudoku có tên là q ra màn hình, sử dụng biến d và c để biểu diễn dòng và cột. Nếu dòng d là dòng thứ 3 hoặc 6 thì ta sẽ in ra màn hình một dòng gồm các kí tự để ngăn cách, mục đích là biểu diễn cho các khối ô vuông 3x3 của Sudoku. Tương tự, nếu cột ở vị trí 3 hoặc 6 thì ta sẽ in ra kí tự | để ngăn cách. Nếu cột ở vị trí thứ 8 thì ta sẽ xuống dòng mới. def in_sudoku(q): for d in range(len(q)): if d % 3 == 0 and d = 0: print( ) for c in range(len(q0)): if c % 3 == 0 and c = 0: print(| , end =) if c == 8: print(str(qdc)) else: print(str(qdc) + , end = ) Thử in với cau_do ở phần đầu, chúng ta được kết quả như sau, ở đây tôi dùng SublimeText để code

Trang 1

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải

Sudoku Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa

Nội dung chính Show

Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy

Bài viết tham khảo từ techwithtim.net

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

Trang 2

2 Thuật toán giải Sudoku

Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình

sử dụng là Python Các bước tiến hành như sau:

• Viết hàm in câu đố Sudoku ra màn hình.

• Tìm vị trí các ô trống trong Sudoku.

• Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không) Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo

• Lặp lại quy trình trên cho đến khi không còn ô trống nào trên câu đố, hoặc không tìm được lời giải.

Input, một câu đố sudoku biểu diễn bởi danh sách list 2 chiều (một danh sách gồm 9 phần tử, mỗi phần tử là dòng – lại là một danh sách gồm 9 phần tử tương ứng với 9 ô trong một dòng) với các ô trống được quy ước điền bởi số 0, ví dụ Sudoku cau_do được biểu diễn như sau:

Trang 3

2.1 Viết hàm in câu đố Sudoku ra màn hình

Ở đây chúng ta sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên

sẽ sử dụng hàm print() của Python để in một đối tượng ra màn hình CMD

Ta sẽ viết hàm in_sudoku để in một câu đố Sudoku có tên là q ra màn hình, sử dụng biến d và c để biểu diễn dòng và cột

Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải

Sudoku Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa

Nội dung chính Show

Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy

Bài viết tham khảo từ techwithtim.net

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

Trang 4

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất.

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

2 Thuật toán giải Sudoku

Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình

sử dụng là Python Các bước tiến hành như sau:

• Viết hàm in câu đố Sudoku ra màn hình.

• Tìm vị trí các ô trống trong Sudoku.

• Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không) Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo

• Lặp lại quy trình trên cho đến khi không còn ô trống nào trên câu đố, hoặc không tìm được lời giải.

Input, một câu đố sudoku biểu diễn bởi danh sách list 2 chiều (một danh sách gồm 9 phần tử, mỗi phần tử là dòng – lại là một danh sách gồm 9 phần tử tương ứng với 9 ô trong một dòng) với các ô trống được quy ước điền bởi số 0, ví dụ

Sudoku cau_do được biểu diễn như sau:

cau_do = [

[7,8,0,4,0,0,1,2,0],

[6,0,0,0,7,5,0,0,9],

Trang 5

2.1 Viết hàm in câu đố Sudoku ra màn hình

Ở đây chúng ta sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên

sẽ sử dụng hàm print() của Python để in một đối tượng ra màn hình CMD

Ta sẽ viết hàm in_sudoku để in một câu đố Sudoku có tên là q ra màn hình, sử dụng biến d và c để biểu diễn dòng và cột

Nếu dòng d là dòng thứ 3 hoặc 6 thì ta sẽ in ra màn hình một dòng gồm các kí tự

để ngăn cách, mục đích là biểu diễn cho các khối ô vuông 3x3 của Sudoku Tương tự, nếu cột ở vị trí 3 hoặc 6 thì ta sẽ in ra kí tự | để ngăn cách Nếu cột ở vị trí thứ 8 thì ta sẽ xuống dòng mới

Trang 6

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

Trang 7

Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải

Sudoku Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa

Nội dung chính Show

Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy

Bài viết tham khảo từ techwithtim.net

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

2 Thuật toán giải Sudoku

Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình

sử dụng là Python Các bước tiến hành như sau:

• Viết hàm in câu đố Sudoku ra màn hình.

• Tìm vị trí các ô trống trong Sudoku.

Trang 8

• Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không) Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo

• Lặp lại quy trình trên cho đến khi không còn ô trống nào trên câu đố, hoặc không tìm được lời giải.

Input, một câu đố sudoku biểu diễn bởi danh sách list 2 chiều (một danh sách gồm 9 phần tử, mỗi phần tử là dòng – lại là một danh sách gồm 9 phần tử tương ứng với 9 ô trong một dòng) với các ô trống được quy ước điền bởi số 0, ví dụ Sudoku cau_do được biểu diễn như sau:

Trang 9

2.1 Viết hàm in câu đố Sudoku ra màn hình

Ở đây chúng ta sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên

sẽ sử dụng hàm print() của Python để in một đối tượng ra màn hình CMD

Ta sẽ viết hàm in_sudoku để in một câu đố Sudoku có tên là q ra màn hình, sử dụng biến d và c để biểu diễn dòng và cột

Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải

Sudoku Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa

Nội dung chính Show

Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy

Bài viết tham khảo từ techwithtim.net

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

2 Thuật toán giải Sudoku

Trang 10

Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình

sử dụng là Python Các bước tiến hành như sau:

• Viết hàm in câu đố Sudoku ra màn hình.

• Tìm vị trí các ô trống trong Sudoku.

• Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không) Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo

• Lặp lại quy trình trên cho đến khi không còn ô trống nào trên câu đố, hoặc không tìm được lời giải.

Input, một câu đố sudoku biểu diễn bởi danh sách list 2 chiều (một danh sách gồm 9 phần tử, mỗi phần tử là dòng – lại là một danh sách gồm 9 phần tử tương ứng với 9 ô trong một dòng) với các ô trống được quy ước điền bởi số 0, ví dụ

Sudoku cau_do được biểu diễn như sau:

Trang 11

2.1 Viết hàm in câu đố Sudoku ra màn hình

Ở đây chúng ta sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên

sẽ sử dụng hàm print() của Python để in một đối tượng ra màn hình CMD

Ta sẽ viết hàm in_sudoku để in một câu đố Sudoku có tên là q ra màn hình, sử dụng biến d và c để biểu diễn dòng và cột

Nếu dòng d là dòng thứ 3 hoặc 6 thì ta sẽ in ra màn hình một dòng gồm các kí tự

để ngăn cách, mục đích là biểu diễn cho các khối ô vuông 3x3 của Sudoku Tương tự, nếu cột ở vị trí 3 hoặc 6 thì ta sẽ in ra kí tự | để ngăn cách Nếu cột ở vị trí thứ 8 thì ta sẽ xuống dòng mới

Trang 12

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải

Sudoku Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa

Nội dung chính Show

Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy

Bài viết tham khảo từ techwithtim.net

Trang 13

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

2 Thuật toán giải Sudoku

Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình

sử dụng là Python Các bước tiến hành như sau:

• Viết hàm in câu đố Sudoku ra màn hình.

• Tìm vị trí các ô trống trong Sudoku.

• Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không) Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo

• Lặp lại quy trình trên cho đến khi không còn ô trống nào trên câu đố, hoặc không tìm được lời giải.

Input, một câu đố sudoku biểu diễn bởi danh sách list 2 chiều (một danh sách gồm 9 phần tử, mỗi phần tử là dòng – lại là một danh sách gồm 9 phần tử tương ứng với 9 ô trong một dòng) với các ô trống được quy ước điền bởi số 0, ví dụ Sudoku cau_do được biểu diễn như sau:

Trang 14

2.1 Viết hàm in câu đố Sudoku ra màn hình

Ở đây chúng ta sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên

sẽ sử dụng hàm print() của Python để in một đối tượng ra màn hình CMD

Ta sẽ viết hàm in_sudoku để in một câu đố Sudoku có tên là q ra màn hình, sử dụng biến d và c để biểu diễn dòng và cột

Trong bài này chúng ta sẽ sử dụng thuật toán quay lui để giải quyết bài toán giải

Sudoku Để hiểu thuật toán quay lui là gì mời bạn xem bài Thuật toán quay lui và minh họa

Trang 15

Nội dung chính Show

Xem thêm: Python: Bài toán xếp hậu sử dụng đệ quy

Bài viết tham khảo từ techwithtim.net

1 Giới thiệu luật chơi và cách giải Sudoku

Sudoku là một trò chơi giải đố theo wiki định nghĩa như sau:

Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi là Number Place) là một trò chơi câu đố sắp xếp chữ số dựa trên logic theo tổ hợp Mục tiêu của trò chơi là điền các chữ số vào một lưới 9×9 sao cho mỗi cột, mỗi hàng, và mỗiphần trong số chín lưới con 3×3 cấu tạo nên lưới chính (cũng gọi là “hộp”, “khối”, hoặc

“vùng”) đều chứa tất cả các chữ số từ 1 tới 9 Câu đố đã được hoàn thành một phần, người chơi phải giải tiếp bằng việc điền số Mỗi câu đố được thiết lập tốt có một cách làm duy nhất

Cách giải trò chơi Sudoku, mời các bạn xem video hướng dẫn sau:

2 Thuật toán giải Sudoku

Sau đây ta sẽ tìm thuật toán giải Sudoku bằng kỹ thuật backtracking, ngôn ngữ lập trình

sử dụng là Python Các bước tiến hành như sau:

• Viết hàm in câu đố Sudoku ra màn hình.

• Tìm vị trí các ô trống trong Sudoku.

• Với mỗi vị trí ô trống vừa tìm được, lần lượt thử đặt số từ 1 đến 9 vào ô trống đó Kiểm tra xem sau khi thử đặt số đó vào ô trống đó thì có hợp lệ (thỏa mãn các điều kiện về luật chơi của Sudoku hay không) Nếu hợp lệ thì tiếp tục tìm các ô trống tiếp theo và lại thử, nếu không thì thử với số_tiếp_theo

Ngày đăng: 08/11/2022, 15:41

w