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

ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN

51 305 2

Đ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 51
Dung lượng 783,74 KB

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

Nội dung

Bài toán “ Mã đi tuần” là một bài toán thú vị, tương đối kinh điển của thuật toán quay lui vét cạn – 1 thuật toán quan trọng và phổ biến trong Trí tuệ Nhân tạo. Mã đi tuần (hay hành trình của quân mã) là bài toán về việc di chuyển một quân mã trên bàn cờ vua ( 8 x 8). Quân mã được đặt ở một ô trên một bàn cờ trống nó phải di chuyển theo quy tắc của cờ vua để đi qua mỗi ô trên bàn cờ đúng một lần. Chính vì vây ch ̣ úng em đã đi đến viêc l ̣ ựa chọn đề tài “ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN” cho bài tâp lớn môn C ̣ ấu trúc dữ liêu ṿ à giải thuât nâng cao. Chúng em vô cùng biết ơn ̣ thầy Phạm Đức Hồng, người trực tiếp giảng dạy, hướng dẫn nhiệt tình cho chúng em trong quá trình nghiên cứu và thực hiện đề tài.

Trang 1

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 NHẬP MÔN TRÍ TUỆ NHÂN TẠO

ĐỀ TÀI:

ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT

BÀI TOÁN MÃ ĐI TUẦN

Sinh viên thực hiện : TRẦN ĐĂNG QUANG

PHẠM LÊ KHÁNH HUYỀN PHẠM QUANG KHẢI

Giảng viên hướng dẫn : PHẠM ĐỨC HỒNG

Hà Nội, tháng 10 năm 2020

Trang 2

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 NHẬP MÔN TRÍ TUỆ NHÂN TẠO

ĐỀ TÀI:

ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI

TOÁN MÃ ĐI TUẦN

Sinh viên thực hiện : TRẦN ĐĂNG QUANG

PHẠM LÊ KHÁNH HUYỀN PHẠM QUANG KHẢI

Giảng viên hướng dẫn : PHẠM ĐỨC HỒNG

Trang 4

Giảng viên chấm 2 :

MỤC LỤC

DANH MỤC HÌNH ẢNH 7 LỜI MỞ ĐẦU 8

Trang 5

CHƯƠNG 1: GIỚI THIỆU VỀ AI VÀ THUẬT TOÁN QUAY LUI VÉT CẠN 9

1.1 GIỚI THIỆU VỀ TRÍ TUỆ NHÂN TẠO 9

1.1.1 Trí tuệ nhân tạo là gì ? 9

1.1.2 Lịch sử 10

1.1.3 Lĩnh vực của AI 11

1.2 GIỚI THIỆU VỀ KỸ THUẬT QUAY LUI 12

1.2.1 Tư tưởng 12

1.2.2 Heuristic 13

1.2.3 Phương pháp 13

1.2.4 Mô hình bài toán 14

1.3 MỘT SỐ BÀI TOÁN ỨNG DỤNG 15

1.3.1 Liệt kê dãy nhị phân có độ dài n 15

1.3.2 Bài toán liệt kê các hoán vị tổ hợp 18

1.3.3 Bài toán 8 quân hậu (n quân hậu) 20

1.4 Kết luận 27

CHƯƠNG 2: BÀI TOÁN MÃ ĐI TUẦN 28

2.1 BÀI TOÁN 28

2.1.1 Nước đi của quân Mã (♘) trên bàn cờ 28

2.1.2 Xuất xứ bài toán 30

2.2 GIẢI QUYẾT BÀI TOÁN 30

2.2.1 Ý tưởng 30

2.2.2 Thiết kế thuật toán 31

CHƯƠNG 3: CÀI ĐẶT, ĐÁNH GIÁ THỬ NGIỆM 35

3.1 Cài đặt với C++ 35

3.1.1 Code 35

3.1.2 Kết quả đạt được 38

3.1.3 Kết luận 38

3.2 Cặt đặt với C# Winform 38

3.2.2 Giao diện chương trình 44

3.2.3 Kết luận 50

KẾT LUẬN 51

TÀI LIỆU THAM KHẢO 52

Trang 6

DANH MỤC HÌNH ẢNH

Hình 1.1: Cây mô tả thuật toán quay lui 15

Hình 1.2: Hàm gen 16

Hình 1.3: Hàm xuất 16

Hình 1.4: Kết quả chạy chương trình liệt kê dãy nhị phân có đo dài n 17

Hình 1.5: Liệt kê hoán vị với n=3 18

Hình 1.6: Kết quả chạy chương trình liệt kê hoán vị tổ hợp 20

Hình 1.7: Kết quả chạy chương trình bài toán 8 quân hậu 26

Hình 2.1: Vị trí xuất phát của quân Mã trên bàn cờ 28

Hình 2.2: Nước đi của quân Mã 29

Hình 2.3: Mã ở rìa cũng giống như đồ trang trí 30

Hình 2.4: Các nước đi có thể có của ngựa 32

Hình 3.1: Kết quả đạt được với C++ 38

Hình 3.2: Giao diện khi chạy chương trình 44

Hình 3.3: Nhập kích thước bàn cờ và tạo bàn cờ 45

Hình 3.4: Chọn vị trí bắt đầu cho quân mã 46

Hình 3.5: Quân mã có đầy đủ 8 nước có thể đi 47

Hình 3.6: Quân mã ở cạnh bàn cờ có số nước đi ít hơn 48

Hình 3.7: Quân mã đang đi tuần 49

Hình 3.8: Kết quả cuối cùng 50

Trang 7

LỜI MỞ ĐẦU

Bài toán “ Mã đi tuần” là một bài toán thú vị, tương đối kinh điển của thuật toánquay lui vét cạn – 1 thuật toán quan trọng và phổ biến trong Trí tuệ Nhân tạo Mã

đi tuần (hay hành trình của quân mã) là bài toán về việc di chuyển một

quân mã trên bàn cờ vua ( 8 x 8) Quân mã được đặt ở một ô trên một bàn cờ trống

nó phải di chuyển theo quy tắc của cờ vua để đi qua mỗi ô trên bàn cờ đúng một lần

Chính vì vâ ̣y chúng em đã đi đến viê ̣c lựa chọn đề tài “ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN” cho

bài tâ ̣p lớn môn Cấu trúc dữ liê ̣u và giải thuâ ̣t nâng cao Chúng em vô cùng biết ơn thầy Phạm Đức Hồng, người trực tiếp giảng dạy, hướng dẫn nhiệt tình cho chúng

em trong quá trình nghiên cứu và thực hiện đề tài

Mặc dù đề tài đã hoàn thành, nhưng chắc chắn vẫn không thể tránh khỏi

những thiếu sót, vì vậy chúng em mong muốn nhận được các ý kiến đóng góp của các thầy cô để có thể hoàn thiện hơn nữa

Chúng em xin chân thành cảm ơn!

Trang 8

CHƯƠNG 1: GIỚI THIỆU VỀ AI VÀ THUẬT TOÁN QUAY LUI VÉT CẠN 1.1 GIỚI THIỆU VỀ TRÍ TUỆ NHÂN TẠO

1.1.1 Trí tuệ nhân tạo là gì ?

Để hiểu trí tuệ nhân tạo (artificial intelligence) là gì chúng ta bắt đầu với kháiniệm sự bay nhân tạo (flying machines), tức là cái máy bay

Đã từ lâu, loài người mong muốn làm ra một cái máy mà có thể di chuyển được trên không trung mà không phụ thuộc vào địa hình ở dưới mặt đất, hay nói cách khác là máy có thể bay được Không có gì ngạc nhiên khi những ý tưởng đầu tiên làm máy bay là từ nghiên cứu cách con chim bay Những chiếc máy biết bay được thiết kế theo nguyên lý “vỗ cánh” như con chim chỉ có thể bay được quãng đường rất ngắn và lịch sử hàng không thực sự sang một trang mới kể từ anh em nhàWright thiết kế máy bay dựa trên các nguyên lý của khí động lực học

(aerodynamics)

Các máy bay hiện nay, như đã thấy, có sức trở rất lớn và bay được quãng đường có thể vòng quanh thế giới Nó không nhất thiết phải có nguyên lý bay của con chim nhưng vẫn bay được như chim (dáng vẻ), và còn tốt hơn chim

Quay lại câu hỏi Trí tuệ nhân tạo là gì Trí tuệ nhân tạo là trí thông minh của máy do con người tạo ra Ngay từ khi chiếc máy tính điện tử đầu tiên ra đời, các nhà khoa học máy tính đã hướng đến phát hiển hệ thống máy tính (gồm cả phần cứng và phần mềm) sao cho nó có khả năng thông minh như loài người Mặc dù cho đến nay, theo quan niệm của người viết, ước mơ này vẫn còn xa mới thành hiện thực, tuy vậy những thành tựu đạt được cũng không hề nhỏ: chúng ta đã làm được các hệ thống (phần mềm chơi cờ vua chạy trên siêu máy tinh GeneBlue) có thể thắng được vua cờ thế giới; chúng ta đã làm được các phần mềm có thể chứng minh được các bài toán hình học; v.v Hay nói cách khác, trong một số lĩnh vực, máy tính có thể thực hiện tốt hơn hoặc tương đương con người (tất nhiên không phải tất cả các lĩnh vực) Đó chính là các hệ thống thông minh

Có nhiều cách tiếp cận để làm ra trí thông minh của máy (hay là trí tuệ nhân tạo), chẳng hạn là nghiên cứu cách bộ não người sản sinh ra trí thông minh của loài người nhưthế nào rồi ta bắt chước nguyên lý đó, nhưng cũng có những cách khác

sử dụng nguyên lý hoàn toàn khác với cách sản sinh ra trí thông minh của loài người mà vẫn làm ra cái máy thông minh như hoặc hơn người; cũng giống như máy bay hiện nay bay tốt hơn con chim do nó có cơ chế bay không phải là giống như cơ chế bay của con chim

Trang 9

Như vậy, trí tuệ nhân tạo ở đây là nói đến khả năng của máy khi thực hiện các công việc mà con người thường phải xử lý; và khi dáng vẻ ứng xử hoặc kết quảthực hiện của máy là tốt hơn hoặc tương đương với con người thì ta gọi đó là máy thông minh hay máy đó có trí thông minh Hay nói cách khác, đánh giá sự thông minh của máy không phải dựa trên nguyên lý nó thực hiện nhiệm vụ đó có giống cách con người thực hiện hay không mà dựa trên kết quả hoặc dáng vẻ ứng xử bên ngoài của nó có giống với kết quả hoặc dáng vẻ ứng xử của con người hay không.

Các nhiệm vụ của con người thường xuyên phải thực hiện là: giải bài toán (tìm kiếm, chứng minh, lập luận), học, giao tiếp, thể hiện cảm xúc, thích nghi với môi trường xung quanh, v.v., và dựa trên kết quả thực hiện các nhiệm vụ đó để kết luận rằng một ai đó có là thông minh hay không Môn học Trí tuệ nhân tạo nhằm cung cấp các phương pháp luận để làm ra hệ thống có khả năng thực hiện các nhiệm vụ đó: giải toán, học, giao tiếp, v.v bất kể cách nó làm có như con người hay không mà là kết quả đạt được hoặc dáng vẻ bên ngoài như con người

Trong môn học này, chúng ta sẽ tìm hiểu các phương pháp để làm cho máy tính biết cách giải bài toán, biết cách lập luận, biết cách học, v.v

1.1.2 Lịch sử

Vào n m 1943, Warren McCulioch và Walter Pitts b t u th c hi n nghiên ă ắ đầ ự ệ

c u ba c sứ ơ ở lý thuy t c b n: tri t h c c b n và ch c n ng c a các noron th n ế ơ ả ế ọ ơ ả ứ ă ủ ầkinh; phân tích các m nh logic; và lý thuy t d oán c a Turing Các tác gi ã ệ đề ế ự đ ủ ả đnghiên c u xuât môứ đề hình noron nhân t o, m i noron c tr ng b i hai tr ng thái ạ ỗ đặ ư ở ạ

"Turing test" nh làư m t ph ng pháp ki m ch ng hành vi thông minh.ộ ươ ể ứ

Th p k 60, 70 Joel Moses vi t ch ng trình Macsyma - ch ng trình toán ậ ỷ ế ươ ươ

h c s d ngọ ử ụ c s tri th c u tiên thành công Marvin Minsky và Seymour Papert ơ ở ứ đầ

a ra các ch ng

đư ứ minh u tiên v gi i h n c a các m ng n -ron n gi n Ngôn đầ ề ớ ạ ủ ạ ơ đơ ả

ng l p trình logic Prologữ ậ ra i và đờ được phát tri n b i Alain Colmerauer Ted ể ởShortliffe xây d ng thành công m tự ộ s h chuyên gia u tiên tr giúp ch n oán ố ệ đầ ợ ẩ đtrong y h c, các h th ng này s d ng ngônọ ệ ố ử ụ ng lu t bi u di n tri th c và suy ữ ậ để ể ễ ứ

Trang 10

di n.ễ

Vào u nh ng n m 1980, nh ng nghiên c u thành công liên quan n AI đầ ữ ă ữ ứ đế

nh các hư ệ chuyên gia (expert systems) – m t d ng c a ch ng trình AI mô ph ng ộ ạ ủ ươ ỏtri th c và các kứ ỹ n ng phân tích c a m t ho c nhi u chuyên gia con ng i.ă ủ ộ ặ ề ườ

Vào nh ng n m 1990 và u th k 21, AI ã t ữ ă đầ ế ỷ đ đạ được nh ng thành t u to ữ ự

l n nh t, AIớ ấ được áp d ng trong logic, khai phá d li u, ch n oán y h c và nhi u ụ ữ ệ ẩ đ ọ ề

l nh v c ng d ngĩ ự ứ ụ khác trong công nghi p S thành công d a vào nhi u y u t : ệ ự ự ề ế ố

t ng kh n ng tính toán c aă ả ă ủ máy tính, t p trung gi i quy t các bài toán con c th , ậ ả ế ụ ểxây d ng các m i quan h gi a AIự ố ệ ữ và các l nh v c khác gi i quy t các bài toán ĩ ự ả ế

t ng t , và m t s chuy n giao m i c a cácươ ự ộ ự ể ớ ủ nhà nghiên c u cho các ph ng pháp ứ ươtoán h c v ng ch c và chu n khoa h c chính xác.ọ ữ ắ ẩ ọ

1.1.3 Lĩnh vực của AI

 Lập luận, suy diễn tự động: Khái niệm lập luận (reasoning), và suy diễn (reference) được sử dụng rất phổ biến trong lĩnh vực AI Lập luận là suy diễnlogic, dùng để chỉ một tiến trình rút ra kết luận (tri thức mới) từ những giả thiết đã cho (được biểu diễn dưới dạng cơ sở tri thức) Như vậy, để thực hiệnlập luận người ta cần có các phương pháp lưu trữ cơ sở tri thức và các thủ tụclập luận trên cơ sở tri thức đó

 Biểu diễn tri thức: Muốn máy tính có thể lưu trữ và xử lý tri thức thì cần có các phương pháp biểu diễn tri thức Các phương pháp biểu diễn tri thức ở đây bao gồm các ngôn ngữ biểu diễn và các kỹ thuật xử lý tri thức Một ngônngữ biểu diễn tri thức được đánh giá là “tốt” nếu nó có tính biểu đạt cao và các tính hiệu quả của thuật toán lập luận trên ngôn ngữ đó Tính biểu đạt của ngôn ngữ thể hiện khả năng biểu diễn một phạm vi rộng lớn các thông tin trong một miền ứng dụng Tính hiệu quả của các thuật toán lập luận thể hiện chi phí về thời gian và không gian dành cho việc lập luận Tuy nhiên, hai yếu

tố này dường như đối nghịch nhau, tức là nếu ngôn ngữ có tínhbiểu đạt cao thì thuật toán lập luận trên đó sẽ có độ phức tạp lớn (tính hiệu quả thấp)và ngược lại (ngôn ngữ đơn giản, có tính biểu đạt thấp thì thuật toán lập luận trên đó sẽ có hiệu quả cao) Do đó, một thách thức lớn trong lĩnh vực AI là xây dựng các ngôn ngữ biểu diễn tri thức mà có thể cân bằng hai yếu tố này, tức là ngôn ngữ có tínhbiểu đạt đủ tốt (tùy theo từng ứng dụng) và có thể lập luận hiệu quả

Trang 11

 Lập kế hoạch: khả năng suy ra các mục đích cần đạt được đối với các nhiệm

vụ đưa ra, và xác định dãy các hành động cần thực hiện để đạt được mục đích đó

 Học máy: là một lĩnh vực nghiên cứu của AI đang được phát triển mạnh mẽ

và có nhiều ứng dụng trong các lĩnh vực khác nhau như khai phá dữ liệu, khám phá tri thức,…

 Xử lý ngôn ngữ tự nhiên: là một nhánh của AI, tập trung vào các ứng dụng trên ngôn ngữ của con người Các ứng dụng trong nhận dạng tiếng nói, nhận dạng chữ viết, dịch tự động, tìm kiếm thông tin,…

 Hệ chuyên gia: cung cấp các hệ thống có khả năng suy luận để đưa ra những kết luận Các hệ chuyên gia có khả năng xử lý lượng thông tin lớn và cung cấp các kết luận dựa trên những thông tin đó Có rất nhiều hệ chuyên gia nổi tiếng như các hệ chuyên gia y học MYCIN, đoán nhận cấu trúc phân tử từ công thức hóa học DENDRAL, …

 Robotics

 …

1.2 GIỚI THIỆU VỀ KỸ THUẬT QUAY LUI

Thuật toán quay lui vét cạn (Backtracking) là một kĩ thuật thiết kế giải thuậtdựa trên đệ quy Ý tưởng của quay lui là tìm lời giải từng bước, mỗi bước chọn mộttrong số các lựa chọn khả dĩ và đệ quy 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 Tư tưởng

Nét đặc trưng của phương pháp quay lui là các bước hướng tới lời giảicuối cùng của bài toán đều đượ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 lại lựa chọn này và tiến hành các bước thử tiếp theo

Trang 12

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

Hành động trên được gọi là quay lui, thuật toán thể hiện phương pháp nàygọi là quay lui

Đ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 lưu trữ trong một ngăn xếp,nên thuật toán thể hiện ý thiết kế một cách đệ quy

1.2.2 Heuristic

Người ta thường sử dụng một số phương pháp heuristic để tăng tốc choquá 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ủalự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àykiểm tra xem từ lời giải chưa đầy đủ hiện tại có thể thu được một lời giải haykhô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ỗibước, nên chi phí tính toán các biên cần tối thiểu, nếu không, hiệu quả toàn cụccủa thuật toán sẽ không được cải tiến Các hàm kiểm tra biên được tạo theokiể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

đó Với mỗi giá trị của X[1] ta sẽ:

- Xét tất cả giá trị X[2] có thể nhận, lại thử X[2] cho các giá trị

đó Với mỗi giá trị X[2] lại xét khả năng giá trị của X[3] tiếp tục nhưvậy cho tới bước:

-

-

Trang 13

- Xét tất cả giá trị X[n] có thể nhận, thử cho X[n] nhận lần lượtgiá trị đó.

Thông báo cấu hình tìm được

Có thể hiểu đơn giản như sau, Thuật toán quay lui thiết kế cấu hình n phần

tử bằng cách cho phần tử đầu tiên nhận giá trị có thể Với mỗi giá trị đó lại tiếptục liệt kê tiếp cấu hình n – 1 từ phần tử thứ 2 Bản chất của quay lui là một quátrình tìm kiếm theo chiều sâu(Depth-First Search)

1.2.4 Mô hình bài toán

Thuật toán quay lui có thể được mô tả bằng đoạn mã giả (pseudocode) sau:

// Cho phần tử x[i] nhận các giá trị mà nó có thể nhận

<bỏ ghi nhận việc gán x[i] = v nếu cần thiết>

Ta có thể trình bày quá trình tìm kiếm lời giải quả thuật toán quay lui bằng cây sau:

Trang 14

Hình 1.1: Cây mô tả thuật toán quay lui

Vấn đề khó nhất khi thiết kế thuật toán dạng quay lui đó là tìm ra tập cáclựa chọn có thể trong mỗi bước Tập lựa chọn này sẽ ảnh hưởng đến tính chínhxác cũng như độ phức tạp (thời gian cũng như bộ nhớ) của thuật toán quay lui

Để minh hoạ, ta xét một vài ví dụ về thiết kế thuật toán theo kĩ thuật quay lui:

1.3 MỘT SỐ BÀI TOÁN ỨNG DỤNG

1.3.1 Liệt kê dãy nhị phân có độ dài n

Nhận xét: Chuỗi nhị phân có độ dài là n Mỗi vị trí trong dãy sẽ có thể chọn

1 trong 2 số : 0 hoặc 1 Hay mỗi vị trí trong dãy đều có 2 cách chọn Vì dãy có n vịtrí, nên sẽ có tất cả 2^n khả năng xảy ra Nói cách khác, sẽ có 2^n dãy nhị phân độdài n

Với ví dụ ở trên (n=3) ta sẽ có 2^3=8 dãy nhị phân khác nhau

Dãy sẽ bắt đầu từ 000 (có giá trị 0) và kết thúc tại 111(có giá trị là 7) Nhưvậy dãy trên là một dãy tăng dần (tăng từ 0 đến 7)

* Xây dựng chương trình

Đầu tiên sẽ tạo ra một mảng A[n] toàn các phần tử bằng 0 Sau đó để tìm cấuhình phía sau nó mình cộng thêm một đơn vị

Trang 16

}

}

}

void xuat(int A[], int n) {

for (int i = 0; i < n; i++)

int *A = new int[n];

//Xây dựng cấu hình đầu tiên

for (int i = 0; i < n; i++) A[i] = 0;

//In cấu hình hiện tại và xây dựng cấu hình kế tiếp

for (int i = 0; i < pow(2, n); i++) {

Trang 17

1.3.2 Bài toán liệt kê các hoán vị tổ hợp

* Sử dụng phương pháp quay lui để giải quyết bài toán

Chúng ta sẽ dùng một mảng A[n+1] lưu các hoán vị, khi đó các hoán vị sẽ được biểu diễn như sau:

A[1], A[2], A[3], …,A[n]

Trong đó A[i] ≠ A[j] Với mọi i,j ∈ [1,n] và i ≠ j

Để xác nhận một phần tử chỉ được dùng một lần ta sẽ dùng mảng Bool để lưu đánh dấu Nếu phần tử chưa sử dụng thì sẽ có giá trị là 0 ngược lại sẽ có giá trị là 1 Ban đầu ta khởi tạo tất cả các phần tử trong mảng đều có giá trị là 0

Ý tưởng của phương pháp quay lui là chúng ta sẽ chọn ra một phần tử chưa sử dụng Lưu phần tử đó vào một cấu hình tổ hợp, sau đó đánh dấu nó đã sử dụng Ta

sẽ lặp lại công việc như trên đến khi đủ cấu hình cho một tổ hợp thì sẽ xuất ra màn hình Sau khi xuất ra ta lại quay trở lại bước trước đó để đánh dấu là nó chưa được chọn

Ta có thể hình dung bài toán như hình vẽ sau: Với n=3 thì bài toán trở thành liệt kê các hoán vị của các phần tử 1, 2, 3 Các hoán vị được liệt kê theo thứ tự từ điển tăng dần như hình vẽ sau:

Hình 1.5 Liệt kê hoán vị với n=3

*Code chạy chương trình:

Trang 18

#define MAX 20

using namespace std;

int n;

int Bool[MAX] = { 0 };//Đánh dấu chưa có phần tử nào sử dụng hết

int A[MAX];//Lưu hoán vị vào mảng A

for (int i = 1; i <= n; i++) {

//Kiểm tra nếu phần tử chưa được chọn thì sẽ đánh dấu

Trang 19

Try(1);

}

*Kết quả chạy chương trình:

Hình 1.6 Kết quả chạy chương trình liệt kê hoán vị tổ hợp

1.3.3 Bài toán 8 quân hậu (n quân hậu)

Bài toán 8 con Hậu là bài toán nổi tiếng trong lĩnh vực toán học

Trang 20

Trong lập trình bài toán này thường xuyên được nhắc đến khi có chủ đề liên quan đến đệ quy quay lui hoặc là trí tuệ nhân tạo.

*Mô tả bài toán

Trên bàn cờ có kích thước 8x8 ô, người chơi đặt các quân Hậu tại mỗi cột sao cho không có quân nào tấn công lẫn nhau, nghĩa là không có bất kỳ quân Hậu nào có chung hàng hoặc cùng chung một đường chéo với quân Hậu đã tồn tại trước đó

Trang 21

}

cout << endl;

}

}

//kiểm tra vị trí theo 3 hướng

bool isOk(int b[][N], int row, int col)

Trang 22

//đệ quy đặt từ trái qua phải theo từng cột

for (size_t i = 0; i < N; i++)

Trang 23

{

//tăng theo hàng và theo cột

//đặt vào từng vị trí nào đó trên cột đang chọn

Trang 25

Hình 1.7 Kết quả chạy chương trình bài toán 8 quân hậu

Ngày đăng: 09/12/2021, 23:46

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Cây mô tả thuật toán quay lui - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 1.1 Cây mô tả thuật toán quay lui (Trang 14)
Hình 1.3: Hàm xuất - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 1.3 Hàm xuất (Trang 15)
Hình 1.6. Kết quả chạy chương trình liệt kê hoán vị tổ hợp - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 1.6. Kết quả chạy chương trình liệt kê hoán vị tổ hợp (Trang 19)
Hình 2.2: Nước đi của quân Mã - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 2.2 Nước đi của quân Mã (Trang 28)
Hình 2.4: Các nước đi có thể có của ngựa - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 2.4 Các nước đi có thể có của ngựa (Trang 31)
Hình 3.1: Kết quả đạt được với C++ - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 3.1 Kết quả đạt được với C++ (Trang 37)
Hình 3.2: Giao diện khi chạy chương trình - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 3.2 Giao diện khi chạy chương trình (Trang 43)
Hình 3.3: Nhập kích thước bàn cờ và tạo bàn cờ - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 3.3 Nhập kích thước bàn cờ và tạo bàn cờ (Trang 44)
Hình 3.5: Quân mã có đầy đủ 8 nước có thể đi - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 3.5 Quân mã có đầy đủ 8 nước có thể đi (Trang 46)
Hình 3.8: Kết quả cuối cùng - ÁP DỤNG THUẬT TOÁN QUAY LUI VÉT CẠN GIẢI QUYẾT BÀI TOÁN MÃ ĐI TUẦN
Hình 3.8 Kết quả cuối cùng (Trang 49)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w