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

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

23 47 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)

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

1 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trị chơi Sudoku, mời bạn xem video hướng dẫn sau: Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Nếu dịng d dịng thứ ta in hình dịng gồm kí tự - - - - - - - - - - để ngăn cách, mục đích biểu diễn cho khối ô vuông 3x3 Sudoku Tương tự, cột vị trí ta in kí tự | để ngăn cách Nếu cột vị trí thứ ta xuống dịng def in_sudoku(q): for d in range(len(q)): if d % == and d != 0: print("- - - - - - - - - - -") for c in range(len(q[0])): if c % == and c != 0: print("| ", end ="") if c == 8: print(str(q[d][c])) else: print(str(q[d][c]) + " ", end = "") Thử in với cau_do phần đầu, kết sau, dùng SublimeText để code: Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trị chơi Sudoku, mời bạn xem video hướng dẫn sau: Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Nếu dịng d dịng thứ ta in hình dịng gồm kí tự - - - - - - - - - - để ngăn cách, mục đích biểu diễn cho khối ô vuông 3x3 Sudoku Tương tự, cột vị trí ta in kí tự | để ngăn cách Nếu cột vị trí thứ ta xuống dịng def in_sudoku(q): for d in range(len(q)): if d % == and d != 0: print("- - - - - - - - - - -") for c in range(len(q[0])): if c % == and c != 0: print("| ", end ="") if c == 8: print(str(q[d][c])) else: print(str(q[d][c]) + " ", end = "") Thử in với cau_do phần đầu, kết sau, dùng SublimeText để code: Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trị chơi Sudoku, mời bạn xem video hướng dẫn sau: Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Nếu dịng d dịng thứ ta in hình dịng gồm kí tự - - - - - - - - - - để ngăn cách, mục đích biểu diễn cho khối ô vuông 3x3 Sudoku Tương tự, cột vị trí ta in kí tự | để ngăn cách Nếu cột vị trí thứ ta xuống dịng def in_sudoku(q): for d in range(len(q)): if d % == and d != 0: print("- - - - - - - - - - -") for c in range(len(q[0])): if c % == and c != 0: print("| ", end ="") if c == 8: print(str(q[d][c])) else: print(str(q[d][c]) + " ", end = "") Thử in với cau_do phần đầu, kết sau, dùng SublimeText để code: Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trị chơi Sudoku, mời bạn xem video hướng dẫn sau: Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật tốn quay lui 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 Giới thiệu luật chơi cách giải Sudoku Sudoku trò chơi giải đố theo wiki định nghĩa sau: Sudoku (数数数数数数 (số độc) sūdoku?) (suːˈdoʊkuː/, /-ˈdɒ-/, /sə-/, ban đầu có tên gọi Number Place) trò chơi câu đố xếp chữ số dựa logic theo tổ hợp Mục tiêu trò chơi điền chữ số vào lưới 9×9 cho cột, hàng, phần số chín lưới 3×3 cấu tạo nên lưới (cũng gọi “hộp”, “khối”, “vùng”) chứa tất chữ số từ tới Câu đố hoàn thành phần, người chơi phải giải tiếp việc điền số Mỗi câu đố thiết lập tốt có cách làm Cách giải trò chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật toán giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku • Với vị trí trống vừa tìm được, thử đặt số từ đến vào trống Kiểm tra xem sau thử đặt số vào trống có hợp lệ (thỏa mãn điều kiện luật chơi Sudoku hay không) Nếu hợp lệ tiếp tục tìm trống lại thử, khơng thử với số_tiếp_theo • Lặp lại quy trình khơng cịn trống câu đố, khơng tìm lời giải Input, câu đố sudoku biểu diễn danh sách list chiều (một danh sách gồm phần tử, phần tử dòng – lại danh sách gồm phần tử tương ứng với dịng) với trống quy ước điền số 0, ví dụ Sudoku cau_do biểu diễn 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ú ý số index Python đánh từ trở đi, vị trí ô bảng số cau_d0[0][0] cau_do[8][8], cau_do[d][c] số vị trí dịng d cột c 2.1 Viết hàm in câu đố Sudoku hình Ở sử dụng giao diện dòng lệnh, chưa sử dụng giao diện đồ họa GUI nên sử dụng hàm print() Python để in đối tượng hình CMD Ta viết hàm in_sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Nếu dịng d dịng thứ ta in hình dịng gồm kí tự - - - - - - - - - - để ngăn cách, mục đích biểu diễn cho khối ô vuông 3x3 Sudoku Tương tự, cột vị trí ta in kí tự | để ngăn cách Nếu cột vị trí thứ ta xuống dịng def in_sudoku(q): for d in range(len(q)): if d % == and d != 0: print("- - - - - - - - - - -") for c in range(len(q[0])): if c % == and c != 0: print("| ", end ="") if c == 8: print(str(q[d][c])) else: print(str(q[d][c]) + " ", end = "") Thử in với cau_do phần đầu, kết sau, dùng SublimeText để code: ... tốn giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng Python Các bước tiến hành sau: • Viết hàm in câu đố Sudoku hình • Tìm vị trí trống Sudoku •... in _sudoku để in câu đố Sudoku có tên q hình, sử dụng biến d c để biểu diễn dòng cột Trong sử dụng thuật toán quay lui để giải toán giải Sudoku Để hiểu thuật tốn quay lui mời bạn xem Thuật toán... câu đố thiết lập tốt có cách làm Cách giải trị chơi Sudoku, mời bạn xem video hướng dẫn sau: Thuật tốn giải Sudoku Sau ta tìm thuật tốn giải Sudoku kỹ thuật backtracking, ngơn ngữ lập trình sử dụng

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

w