Mơ tả bài toánTrò chơi Line là trò chơi di chuyển các viên bi trong một hình vuông 9 x 9 ô.Bi được ăn khi tạo thành các hàng, cột, đường chéo gồm 5 viên bi liên tiếp cùngmàu.. Một thuật
lOMoARcPSD|11346942 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC NHA TRANG KHOA CÔNG NGHỆ THÔNG TIN —————————————– BÁO CÁO BÀI TẬP PROJECT MÔN HỌC: TRÍ TUỆ NHÂN TẠO Giảng viên hướng : Nguyễn Đình Cường dẫn : Nguyễn Tuấn Kiệt Họ tên sinh viên : 62130887 MSSV : HETTNT Lớp học phần Nha Trang – 8/2023 lOMoARcPSD|11346942 MỤC LỤC I Bài tập cài đặt thuật toán Bài tập thuật toán BFS (Line3_BFS.cpp) a Mơ tả tốn b Giải thích code cách giải c Độ phức tạp giải thuật Bài toán TSP (TSP.cpp) a Mơ tả tốn b Giải thích code cách giải c Độ phức tạp giải thuật 10 Bài tốn tơ màu đồ thị (toMauDoThi.cpp) 11 a Mô tả toán 11 b Giải thích code cách giải 11 c Độ phức tạp giải thuật 13 Bài toán bốc sỏi (bocsoi.cpp) 13 a Mơ tả tốn 13 b Giải thích code cách giải 14 c Độ phức tạp giải thuật 15 II Bài tập thực hành lớp .15 Đổi tiền (doitien.cpp) .15 a Mơ tả tốn 15 b Giải thích code cách giải 16 c Độ phức tạp giải thuật 16 Trò chơi tictactoe (tictactoe.cpp) 17 a Mơ tả tốn 17 b Giải thích code cách giải 17 c Độ phức tạp giải thuật 19 Puzzle (Puzzle.cpp) 20 a Mô tả 20 b Giải thích code cách giải 20 c Độ phức tạp giải thuật .23 Tìm số nguyên tố lớn (timSoNTMax.cpp) 24 a Mơ tả tốn 24 b Giải thích code cách giải 24 lOMoARcPSD|11346942 c Độ phức tạp thuật toán 25 Xây dựng máy chủ IIS làm server multimedia cho video H.264, music mp3 26 a Tổng quan vềề IIS server .26 b Các bước thực 26 Cài đặt Ubuntu chạy trền nềền windows 29 Thiềtế lập mạng lan truy cập máy chủ từ xa qua kềết nốếi ssh 33 a Tổng quan vềề SSH 33 b Tổng quan vềề SSH 33 c Xây dựng máy chủ FTP 37 Sử dụng Toolkit multimedia ffmpeg, ffplay thực cống việc 41 III.Kềết Luận 43 TÀI LIỆU THAM KHẢO .44 lOMoARcPSD|11346942 I Bài tập cài đặt thuật toán Bài tập thuật tốn BFS (Line3_BFS.cpp) a Mơ tả tốn Trị chơi Line trị chơi di chuyển viên bi hình vng x ô Bi ăn tạo thành hàng, cột, đường chéo gồm viên bi liên tiếp màu Một thuật toán sử dụng trị chơi tìm đường để di chuyển viên bi Giả sử trò chơi Line tổng qt có n dịng, n cột Đánh số dịng từ đến n theo thứ tự từ xuống dưới, đánh số cột từ đến n theo thứ tự từ trái sang phải Giả sử có viên bi (y, x) – dịng y cột x, bi di chuyển đến ô (y+1, x), (y-1, x), (y, x+1), (y, x-1), trống Cho vị trí bắt đầu vị trí kết thúc viên bi, viết chương trình cho biết đường ngắn viên bi (qua nhất) Dữ liệu nhập: gồm dịng sau Dòng thứ gồm năm số n, sy, sx, dy, dx, số cách khoảng trắng (2 ≤ n ≤ 30; ≤ sy, sx, dy, dx ≤ n) sy số dòng, sx số cột viên bi cần di chuyển dy số dòng, dx số cột vị trí cần di chuyển viên bi đến lOMoARcPSD|11346942 Trong n dòng tiếp theo, dòng gồm n số nguyên 1, số cách khoảng trắng, biểu thị tình trạng trị chơi Số nghĩa vị trí ô có bi, số nghĩa vị trí trống (Dữ liệu cho bảo đảm (sy, sx) có giá trị 1, ô (dy, dx) có giá trị 0) Dữ liệu xuất: Nếu tìm đường ngắn nhất: Dòng in số nguyên m chiều dài (số ô) đường (bao gồm ô viên bi ô đích) Trong m dòng tiếp theo, dòng thứ I in hai giá trị yi, xi vị trí thứ I đường đi, hai số cách khoảng trắng (Nếu có nhiều đường ngắn nhất, cần in đường bất kỳ) Nếu khơng tìm đường đi: in b Giải thích code cách giải Để giải tốn trị chơi Line, ta sử dụng thuật tốn tìm đường ngắn ma trận Dưới phần giải thích chi tiết cách code hoạt động: Khai báo cấu trúc Point để đại diện cho ô ma trận Mỗi Point có hai thuộc tính y x lưu trữ tọa độ dịng cột tương ứng struct Point { int y, x; }; Hàm isValidMove(int y, int x, int n) kiểm tra xem bước di chuyển từ (y, x) có hợp lệ hay khơng Nó trả true nằm ma trận kích thước nxn khơng có viên bi, ngược lại trả false Bool isValidMove(int y, int x, int n) { return (y >= && y < n && x >= && x < n); } Hàm findShortestPath(vector &board, Point start, Point end) tìm đường ngắn từ start đến ô end ma trận board Để làm điều này, thuật tốn sử dụng BFS (Breath-First Search) duyệt qua kề để tìm đường Các bước hàm bao gồm: vector findShortestPath(vector &board, Point start, Point end) { lOMoARcPSD|11346942 int n = board.size(); vector visited(n, vector(n, false)); vector parent(n, vector(n, {-1, -1})); queue q; q.push(start); visited[start.y][start.x] = true; int dy[] = {1, -1, 0, 0}; int dx[] = {0, 0, 1, -1}; while (!q.empty()) { Point current = q.front(); q.pop(); if (current.y == end.y && current.x == end.x) { // Tìm thấy đích, truy vết để lấy đường vector path; Point p = end; while (p.y != start.y || p.x != start.x) { path.push_back(p); p = parent[p.y][p.x]; } path.push_back(start); reverse(path.begin(), path.end()); return path; } for (int I = 0; i> n >> sy >> sx >> dy >> dx; vector board(n, vector(n)); for (int I = 0; I < n; i++) { for (int j = 0; j < n; j++) { cin >> board[i][j]; } } Point start = {sy – 1, sx – 1}; Point end = {dy – 1, dx – 1}; vector path = findShortestPath(board, start, end); if (path.empty()) { cout