1. Trang chủ
  2. » Luận Văn - Báo Cáo

(Luận văn) nghiên cứu phương pháp quay lui và ứng dụng giải bài toán sudoku

53 1 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 53
Dung lượng 1,31 MB

Nội dung

ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC SƯ PHẠM KHOA TIN - - PHẠM THỊ THANH HIỀN a lu n n va p ie gh tn to NGHIÊN CỨU PHƯƠNG PHÁP QUAY LUI VÀ ỨNG DỤNG GIẢI BÀI TOÁN SUDOKU d oa nl w a nv a lu KHÓA LUẬN TỐT NGHIỆP ll u nf m tz n oi z m co l gm @ an Lu n va ac th si Mục lục MỞ ĐẦU I LÝ DO CHỌN ĐỀ TÀI: II MỤC TIÊU, NHIỆM VỤ: III PHƯƠNG PHÁP NGHIÊN CỨU: IV BỐ CỤC CỦA ĐỀ TÀI: Chương I: CƠ SỞ LÝ THUYẾT I CƠ SỞ LÝ THUYẾT: a lu n Mảng: va n 1.1 Mơ hình quan niệm: p ie gh tn to 1.2 Các đặc trưng bản: .3 1.3 Cấu trúc lưu trữ: 1.4 Các phép toán bản: .3 oa nl w Hàm đệ quy: 2.1 Đệ quy gì? .4 d a lu 2.2 Cấu trúc chương trình đệ quy: a nv 2.3 Đặc điểm: u nf 2.4 Ví dụ: ll Khử đệ quy: .6 m n oi 3.1 Khái niệm: .7 tz 3.2 Cách thực : .7 z II NGƠN NGỮ LẬP TRÌNH: .7 @ gm Vài nét Visual C#: .7 PHƯƠNG PHÁP QUAY LUI .10 m Chương II: co l Đặc điểm ngôn ngữ C#: an Lu I KHÁI NIỆM QUAY LUI: 10 n va ac th si * Tư tưởng thuật toán: 11 II MƠ HÌNH CỦA BÀI TỐN: 11 III ỨNG DỤNG: 12 Phương pháp : .12 Giải thuật tổng quát : 13 Chương III: BÀI TOÁN SUDOKU 15 I GIỚI THIỆU BÀI TOÁN: 15 Lịch sử đời: .15 a lu Luật chơi: .16 n Các biến thể: 17 va n II XÂY DỰNG CẤU TRÚC DỮ LIỆU CHO BÀI TOÁN: 18 p ie gh tn to III THUẬT TOÁN: 23 Tổng quan: .23 1.1 Xác định toán: 23 oa nl w 1.1.1 Thông tin vào: 23 1.1.2 Thông tin ra: 23 d a nv a lu 1.2 Cách xác định ô số bất kỳ: .23 1.2.1 Xác định ô theo số thứ tự từ đến 81: 23 u nf 1.2.2 Xác định [hàng, cột]: .24 ll m 1.2.3 Xác định [vùng, số thứ tự vùng]: .24 n oi tz Vấn đề đặt ra: 25 Giải vấn đề: 26 z 3.1 Vấn đề 1: 26 @ l gm 3.2 Vấn đề 2: 30 co Giải thuật chính: 31 m Các phương thức sử dụng chương trình: 32 Lu an Xây dựng hàm: 33 n va ac th si 6.1 Hàm kiểm tra cột: 33 6.2 Hàm kiểm tra hàng: .34 6.3 Hàm kiểm tra vùng: .35 6.4 Hàm giải chương trình thủ công: 36 6.5 Hàm giải chương trình phương pháp quay lui: .36 6.6 Hàm giải đến đáp án cần chọn: 38 6.7 Hàm đếm số đáp án: 38 IV GIỚI THIỆU CHƯƠNG TRÌNH GIẢI: 38 a lu Tổng quan: .38 n Chức chính: 43 va n Bảng phím tắt: .44 p ie gh tn to V THỬ NGHIỆM: .45 KẾT LUẬN 48 d oa nl w TÀI LIỆU THAM KHẢO 49 a nv a lu ll u nf m tz n oi z m co l gm @ an Lu n va ac th si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an MỞ ĐẦU I LÝ DO CHỌN ĐỀ TÀI: Ngày với phát triển không ngừng khoa học kỹ thuật, đặc biệt ngành mũi nhọn như: Điện Tử - Tin Học - Viễn Thông v.v Nếu không thường xuyên cập nhật thơng tin khơng bắt kịp đà phát triển giới Đất nước ngày tiến bộ, khoa học kĩ thuật ngày phát triển đòi hỏi người ngày phải có lực thật sự, phải có khả tư logic tốt để tiếp cận với công nghệ đại cách nhanh chóng Vấn đề đặt làm a lu để phát triển khả tư người, chúng không nhận n n va trị chơi trí tuệ, trị chơi với số giúp rèn Và SuDoKu trị chơi trí tuệ tiếng, trị chơi khơng ồn p ie gh tn to luyện trí não, tư logic âm thầm phát triển khơng đơn trị chơi mà giúp kích oa nl w thích tư duy, suy nghĩ logic thơng qua số Ngoài vấn đề trên, SuDoKu hấp dẫn giới trẻ lý chơi lúc d nơi, chơi xe buýt, chơi, chí dã ngoại, du lịch a nv a lu Luật chơi SuDoKu đơn giản, đáp án đơi lại khó giải, khơng cần dùng đến kiến thức số học hay tính tốn, SuDoKu thích ứng cho u nf người, trẻ em có hội giải SuDoKu thành cơng người lớn ll m Trong thuật tốn quay lui thuật tốn điển hình để giải lớp toán n oi tz liệt kê hay toán tối ưu như: toán người giao hàng, toán mã tuần, toán hậu, tốn tìm đường mê cung Bằng việc liệt kê tình z huống, thử khả tìm thấy lời giải đúng, thuật toán @ m co l theo chiều sâu tập hợp toán phần tử gm quay lui chia nhỏ toán, lời giải tốn lớn kết việc tìm kiếm an Lu n va ac -1- th Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Nhận thấy tư tưởng thuật toán phù hợp với cách giải trò chơi, nên đề tài ”Nghiên cứu phương pháp quay lui ứng dụng giải tốn SuDoku” thực nhằm tìm hiểu thuật tốn quay lui ứng dụng II MỤC TIÊU, NHIỆM VỤ: Đề tài thực nhằm đạt mục tiêu hiểu rõ, hiểu sâu sắc thuật toán quay lui Xây dựng thành cơng chương trình giải SuDoKu với nhiều đáp án với thời gian nhanh III PHƯƠNG PHÁP NGHIÊN CỨU: a lu - Tìm hiểu thơng tin mạng internet, sách, báo, tạp chí… n n va - Thu thập ý kiến chuyên gia (giáo viên hướng dẫn, giáo viên - Kết hợp nghiên cứu lý thuyết với thực hành, rèn luyện kỹ phân tích chương p ie gh tn to khoa, ý kiến bạn bè,…) trình kỹ lập trình oa nl w IV BỐ CỤC CỦA ĐỀ TÀI: Nội dung đề tài trình bày sau: d a nv a lu MỞ ĐẦU u nf Chương I: CƠ SỞ LÝ THUYẾT ll Chương II: PHƯƠNG PHÁP QUAY LUI m n oi Chương III: BÀI TOÁN SUDOKU tz KẾT LUẬN z m co l gm @ TÀI LIỆU THAM KHẢO an Lu n va ac -2- th Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an CƠ SỞ LÝ THUYẾT Chương I: I CƠ SỞ LÝ THUYẾT: Mảng: 1.1 Mơ hình quan niệm: Mảng dãy có thứ tự (về mặt vị trí) phần tử với hai đặc điểm sau : + Số lượng phần tử cố định + Mọi phần tử có kiểu liệu (dữ liệu sở mảng) a lu 1.2 Các đặc trưng bản: n n va - Cho phép truy cập ngẫu nhiên đến phần tử Thời gian truy cập đến - Số lượng phần tử mảng cố định p ie gh tn to phần tử 1.3 Cấu trúc lưu trữ: oa nl w - Cấu trúc lưu trữ đơn giản dùng địa tính để thực lưu trữ tìm kiếm phần tử, mảng chiều hay vectơ d a lu - Các phần tử bố trí sát nhớ theo thứ tự tăng dần a nv số nên dễ dàng tìm địa phần tử biết số … … m a2 ll u nf a1 an tz n oi 1.4 Các phép toán bản: z - Thường có phép tạo lập (create) mảng, tìm kiếm (retrieve) phần tử @ gm mảng, cập nhật (update) phần tử mảng …Ngoài giá trị, phần tử l mảng đặc trưng số (index) thể thứ tự phần tử m co mảng Vectơ mảng chiều, phần tử ứng với số i Ma trận an mở rộng mảng hai chiều , mảng ba chiều, …, mảng n chiều Lu mảng hai chiều, phần tử aij ứng với hai số i j Tương tự người ta n va ac -3- th Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an Hàm đệ quy: 2.1 Đệ quy gì? Ta nói: - Một đối tượng đệ quy bao gồm phận định nghĩa dạng - Một thủ tục gọi đệ quy q trình thực phải gọi đến với kích thước nhỏ tham số - Trong thân hàm, gọi tới hàm để xử lý tốn gọi hàm đệ quy a lu Ví dụ: n n va 1) Định nghĩa số tự nhiên: tn to - số tự nhiên - n số tự nhiên n-1 số tự nhiên p ie gh 2) Định nghĩa hàm giai thừa: oa nl w - 0! = - Nếu n > n! = n(n-1)! 2.2 Cấu trúc chương trình đệ quy: d - Phần sở : a nv a lu Một chương trình đệ quy gồm phần: ll u nf Trong đó, chứa tác động hàm thủ tục với số giá trị cụ thể m ban đầu tham số (hay gọi trường hợp dừng) tz - Phần đệ quy: n oi Ví dụ : if n=1 then gt:=1; z Trong đó, tác động cần thực cho giá trị thời tham @ nhỏ tham số m co Ví dụ: if n>1 then gt:=n*gt(n-1); l gm số định nghĩa tác động định nghĩa trước với kích thước an Lu n va ac -4- th Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an 2.3 Đặc điểm: - Mỗi lần hàm tự gọi đệ quy đến máy tính tự tạo biến cục - Có lần hàm gọi đệ quy có nhiêu lần khỏi hàm (kiểu lặp hàm) - Khi thoát ngồi hàm đệ quy loạt biến cục tạo dùng đệ quy lúc giải phóng, chúng giải phóng trước biến cục (sinh đệ quy) tạo sau - Sử dụng đệ quy phương pháp làm cho chương trình ngắn gọn, dễ hiểu a lu làm tốn nhớ thời gian n n va 2.4 Ví dụ: Function giaithua(n:word):integer; p ie gh tn to Hàm tính giai thừa n (tính n!): begin if n=0 then giaithua:=1 oa nl w else giaithua:=giaithua(n-1)*n; end; d a lu Ví dụ: Tính n! =3 a nv Ta có giá trị truyền vào hàm gt qua biến n ll u nf Trong ví dụ này, qui trình thực sau: m - Khi có lệnh gọi hàm, chẳng hạn: - Thì máy ghi nhớ là: tz n oi n := gt(3); z - Kế tiếp máy lại ghi nhớ: m an Lu - Theo định nghĩa hàm thì: co gt(2) := * gt(1); tính gt(1) l gm @ gt(3) := * gt(2); tính gt(2) n va ac -5- th Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an gt(1) := 1; - Máy quay ngược lại: gt(2) := * 1; cho kết - Tiếp tục: - gt(3) := * 2; cho kết - Như kết cuối trả Ta có: 3! = Nhận xét a lu  Ưu điểm: n - Điểm mạnh lớn nhất: chương trình, code trở nên ngắn gọn, dễ hiểu, n va thuận lợi cho việc chỉnh sửa  Nhược điểm: p ie gh tn to - Dễ chuyển thành chương trình ngơn ngữ lập trình - Nhược điểm lớn tốn nhớ oa nl w - Mất nhiều thời gian xử lý, làm giảm tốc độ chạy chương trình - Khơng áp dụng cho ngơn ngữ lập trình d a lu Đệ quy khơng phương pháp lập trình quan trọng mà a nv phương pháp suy nghĩ để giải vấn đề cách tổng quát dựa ý tưởng: u nf + Đơn giản hố cơng việc ll + Phân vùng để xử lý m n oi Khử đệ quy: Đệ quy tim nghiên cứu lý thuyết thực tz hành tính tốn, thể nhiều sức mạnh có ưu điểm nhiều tốn z Nhưng có đơi khi, hạn hẹp nhớ dành cho chương trình khơng cho @ gm phép làm điều đó.Vì vấn đề khử đệ quy lại cần quan tâm, xem m co l xét an Lu n va ac -6- th Stt.010.Mssv.BKD002ac.email.ninhd.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj.dtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn.Stt.010.Mssv.BKD002ac.email.ninhddtt@edu.gmail.com.vn.bkc19134.hmu.edu.vn si C.vT.Bg.Jy.Lj.Tai lieu Luan vT.Bg.Jy.Lj van Luan an.vT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.LjvT.Bg.Jy.Lj Do an.Tai lieu Luan van Luan an Do an.Tai lieu Luan van Luan an Do an push(tou(i, o)); } } } 6.3 Hàm kiểm tra vùng: void checkarea() { int k, value, o=0, count, b, i, j; for (k = 1; k

Ngày đăng: 22/07/2023, 16:04