








Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Greenwich asm. Distinction , merit , pass, student ceremony
Typology: Exercises
1 / 14
This page cannot be seen from the preview
Don't miss anything!









Supervisor: Trần Thành Trung Trainee: Lê Thị Hạnh Nhân Student’s code: 18F Class: ANHK15B
Đề bài: Mã đi tuần 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 ô bất kì 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. Input: Tọa độ ban đầu x, y của quân mã trên bàn cờ. Output: -Xuất ra tất cả cách di chuyển của quân mã (từ 1 đến 64) -Nếu không có lời giải, xuất “Khong co cach giai !”
Cách di chuyển quân mã : Nước đi của một quân mã giống hì nh chữ L và nó có thể di chuyển tất cả các hướng. Ở một vị trí thích hợp thì quân mã có thể di chuyển tối đa đến được 8 vị trí nằm trong bàn cờ. 2 mảng X[i], Y[i] chứa các cặp giá trị mà quân mã có thể di chuyển. Các bước đi đó là: ( -2, -1), ( -2, 1), ( -1, -2), ( -1, 2), ( 1, - 2), ( 1, 2), ( 2, -1), ( 2, 1) thỏa mãn |x| + |y| = 3 Kiểm tra tính hợp lệ của nước đi: Khởi tạo 1 ma trận A[8x8] = {0} lưu vị trí từng ô trên bàn cờ. Tất cả mảng đều khởi tạo giá trị là 0 (quân mã chưa đi qua). Sử dụng thuật toán đệ quy (quay lui) để t ìm đường đi cho quân mã: Gọi x,y là vị trí ban đầu của quân mã, th ì vị trí tiếp theo mà quân mã đi sẽ có dạng x+X[i], y+Y[i]. Một vị trí được gọi là hợp lệ thì sẽ thỏa mãn các tính chất sau: 0 < x+X[i]≤ n.
Đề bài: Trên bàn cờ có kích thước 8x8 ô, đặt 8 quân hậu sao cho chúng không ăn lẫn nhau (theo luật cờ vua quốc tế). Có nghĩa l à không có cùng 2 quân h ậu trên cùng m ột hàng, cột hay đường chéo.
a) Xác định bàn cờ Xây dựng bàn cờ 8x8 dựa trên ma trận 8x8, dùng bi ến x dể đánh dâu các hàng từ trên xuống( 1 đến 8), dùng bi ến y để đánh dấu các cột từ trái qua phải (1 đến 8). Hình 2.1 X ác định bàn cờ dựa trên ma trận 8x8. b) Xác định điều kiện tấn công của 2 quân hậu Quân hậu có khả năng đi 8 hướng xung quanh nó nên các trường hợp tấn công: Chung cột Chung hàng Chung đường chéo VD: Cho 2 quân ở tọa độ(x,y) như sau: Quân hậu A ở vị trí (5,2), quân hậu B ở vị trí (2,5).
Hình 2.2 V í dụ 2 quân hậu ở vị trí (5,2) và (2,5) Xét đi ều kiện chung cột yA yB (2 5) Xét đi ều kiện chung hàng xA xB (5 2) Xét đi ều kiện chung đường chéo |xA – xB| = |yA –yB| (|5 – 2| = |2 –5|) Quân hậu A và quân hậu B tấn công nhau c) Sử dụng thuật toán đệ quy để tìm v ị trí các quân hậu: Đầu tiên đặt quân hậu thứ nhất vào cát cột trên hàng 1 sau đó đặt quân hậu thứ hai vào các cột trên hàng thứ 2 xét đi ều kiện không chung cột, hàng, đường chèo v ới quân hậu thứ nhất để truy vết vị trí quân hậu không tấn công quân hậu thứ nhất, tiếp tục đặt quân hậu thứ 3 vào các cột hàng 3 xét đi ều kiện để không bị các quân hậu trước tấn công, tiếp tục cho đến khi xét quân h ậu thứ tám để in ra 1 kết quả.
Hàm kiểm tra 2 quân hậu có tấn công nhau không bool kiemtra(int x2, int y2) { for (int i = 1; i < x2; i++) if (a[i] == y2 || abs(i - x2) == abs(a[i] - y2)) return false; return true; }
Hình 3.2 K ết quả sắp xếp lần đầu tiên Tương ứng với hình 3.3 trên b àn cờ 8x Hình 3.3 K ết quả sắp xếp lần đầu tiên trên bàn cờ 8x
Đề bài: Hì nh vuông chia thành 9x9 ô vuông nhỏ. Mỗi ô vuông con có giá trị khoảng từ 1 đến 9. Ban đầu hì nh vuông có một số ô vuông con cho trước (điền sẵn số) và còn lại là trống. Hãy điền các số từ 1-9 vào các ô con lại sao cho: hàng ngang-hàng dọc là các số khác nhau từ 1-9,mỗi khối 3x3 chính là các số khác nhau từ 1-9. Input : Mảng A có kích thước 9x9, mỗi ô theo đề bài sẽ có giá trị điền trước, ô điền có giá trị 0. Output : Nếu không tồn tại giải pháp thì in ra “No solution”. Ngược lại phải in 81 số đó, và phân cách giống như đầu vào.
a) Xác định vị trí ô trống cần điền (có giá trị là 0) Nhận vào giá trị mảng ma trận kích thước 9x9, những ô trống cần điền có giá trị 0, ngược lại những ô còn lại cho trước có giá trị từ 1 – 9. b) Thử lần lượt các giá trị vào các ô trống Điền vào các ô trống lần lượt giá trị 1 – 9 và kiểm tra tính hợp lệ của nó. Tính hợp lệ của một số khi được điền vào là: Số đó xuất hiện duy nhất trên hàng Số đó xuất hiện duy nhất trên cột Số đó xuất hiện duy nhất trong ô vuông 3x3 chứa số đó c) Sử dụng thuật toán đệ quy để điền vào các ô trống đó: X ét từng ô trống (có giá trị 0), kiểm tra lần lượt giá trị 1-9 theo điều kiện (theo hàng, theo cột, theo ô vuông 3x3), gán ô đó cho giá trị thoả mãn rồi tiếp tục x ét những ô tiếp theo, lặp lại cho đến khi dòng tiếp theo vượt quá số dòng của sudoku.
// Kiem tra gia tri neu khac 0 se tiep tuc truy xuat if (A[row][col] != 0) { next(row, col); solve(row, col); } else { // Dien thu gia tri 1-9, kiem tra dieu kien sudoku for (int i = 1; i < 10; i++) { if (isValid(row, col, i)) { int prevRow = row; int prevCol = col; A[row][col] = i; next(row, col); solve(row, col); if (ans) return; row = prevRow; col = prevCol; A[row][col] = 0; } } } } Hàm đệ quy solve nhận giá trị dòng và cột: o Điểm dừng của hàm đệ quy solve là khi số dòng tăng lên là 9, lúc đó kết quả trả về true và thoát khỏi hàm đệ quy o Khi chưa dừng, hàm sẽ xé t nếu chỉ số đang xé t có giá trị khác 0, đệ quy ở chỉ số tiếp theo o Ngược lại, điền lần lượt giá trị 1-9 và kiểm tra sự tồn tại của giá trị đó với hàng, cột, ô vuông, nếu hợp lệ (khi giá trị đó chưa tồn tại) thì chỉ số đang xé t nhận giá trị đó và đi đến chỉ số kế tiếp, nếu không thì gán lại giá trị chỉ số đó là 0 và thử tiếp các giá trị khác.
Kết quả: Trường hợp đề bài cho, có cách giải Trường hợp thay đổi giá trị [0,0] = 5, không có cách giải