1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO cáo CUỐI kỳ TỔNG hợp môn cấu TRÚC dữ LIỆU và GIẢI THUẬT

69 26 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 69
Dung lượng 425,37 KB

Nội dung

TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN CUỐI KÌ MƠN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT BÁO CÁO CUỐI KỲ TỔNG HỢP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Người hướng dẫn: TS VÕ HOÀNG QUÂN Người thực hiện: NGUYỄN DUY ĐÔNG – 52000749 Lớp : 20050301 Khố THÀNH PHỐ HỒ CHÍ MINH, NĂM 2022 : 24 TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN CUỐI KÌ MƠN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT BÁO CÁO CUỐI KỲ TỔNG HỢP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT Người hướng dẫn: TS VÕ HỒNG QN Người thực hiện: NGUYỄN DUY ĐƠNG – 52000749 Lớp : 20050301 Khố THÀNH PHỐ HỒ CHÍ MINH, NĂM 2022 : 24 i LỜI CẢM ƠN Em xin chân thành cảm ơn thầy Võ Hoàng Quân đồng hành giúp đỡ em học kí vừa qua, nhờ thầy mà em tiếp thu hiểu môn học Cấu trúc liệu giải thuật Lần nữa, em xin chân thành cảm ơn ii ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TƠN ĐỨC THẮNG Tơi xin cam đoan sản phẩm đồ án riêng hướng dẫn TS Võ Hoàng Quân; Các nội dung nghiên cứu, kết đề tài trung thực chưa cơng bố hình thức trước Những số liệu bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá tác giả thu thập từ nguồn khác có ghi rõ phần tài liệu tham khảo Ngồi ra, đồ án cịn sử dụng số nhận xét, đánh số liệu tác giả khác, quan tổ chức khác có trích dẫn thích nguồn gốc Nếu phát có gian lận tơi xin hồn toàn chịu trách nhiệm nội dung đồ án Trường đại học Tơn Đức Thắng khơng liên quan đến vi phạm tác quyền, quyền gây q trình thực (nếu có) TP Hồ Chí Minh, ngày 10 tháng năm 2022 Tác giả (ký tên ghi rõ họ tên) Đông Nguyễn Duy Đông iii PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN Phần xác nhận GV hướng dẫn _ _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng năm (kí ghi họ tên) Phần đánh giá GV chấm _ _ _ _ _ _ _ Tp Hồ Chí Minh, ngày tháng năm (kí ghi họ tên) iv TĨM TẮT BÁO CÁO GỒM CÓ HAI PHẦN: PHẦN 1: ĐỀ BÀI PHẦN 2: PHÂN TÍCH VÀ GIẢI QUYẾT YÊU CẦU MỤC LỤC DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ PHẦN – ĐỀ BÀI .5 I Đệ Quy II Sắp xếp III Stack IV Cấu trúc liệu Danh sách Cây V Đồ thị PHẦN - PHÂN TÍCH VÀ GIẢI QUYẾT YÊU CẦU .8 I Đệ quy 1.1 Lý thuyết 1.2 Thực hành .17 II Sắp xếp 18 2.1 Khởi tạo mảng gồm 10 phần tử: 18 III Stack 29 3.1 Chuyển đổi biểu thức trung tố (Infix) sang hậu tố (postfix) .29 3.2 Tính biểu thức hậu tố (postfix) .31 IV Cấu trúc liệu Danh sách Cây 32 4.1 Lý thuyết 32 4.2 Thực hành 34 4.2.1 Cài đặt code Linked List 34 4.2.2 Cài đặt code AVL 39 V Đồ thị 48 5.1 Lý thuyết 48 5.1.1 Đồ thị người dùng .48 5.1.2 Duyệt đồ thị 48 5.2 Thực hành 55 TÀI LIỆU THAM KHẢO 61 DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ 49 } } avl.insertStudent(e); avl.insertStudent(f); avl.insertStudent(g); avl.insertStudent(h); avl.insertStudent(i); avl.insertStudent(k); avl.insertStudent(l); avl.insertStudent(m); avl.insertStudent(n); avl.insertStudent(o); avl.insertStudent(p); System.out.println("Cay AVL: "); avl.NLR(avl.getRoot()); System.out.println("Sinh vien can tim: "); System.out.println(avl.search("00000002")); System.out.println("Xoa sinh vien 00000003: "); avl.deleteStudent("00000003"); avl.NLR(avl.getRoot()); V Đồ thị 5.1 Lý thuyết 5.1.1 Đồ thị người dùng 50 5.1.2 Duyệt đồ thị Duyệt đồ thị BFS: Đỉnh Đỉnh kề Hàng đợi Kết 2,3,5,7,9 2,3,5,7,9 1,8,11,12,1 3,5,7,9,8,11,12,13 1,2 1,4 5,7,9,8,11,12,13,4 1,2,3 1,6,10,11 7,9,8,11,12,13,4,6,10,11 1,2,3,5 9,8,11,12,13,4,6,10,11 1,2,3,5,7 1,4,10,15 8,11,12,13,4,6,10,11,4,10,15 1,2,3,5,7,9 2,14 11,12,13,4,6,10,11,4,10,15,14 1,2,3,5,7,9,8 11 2,5,6,18 12,13,4,6,10,11,4,10,15,14,6,18 1,2,3,5,7,9,8,11 12 2,22 13,4,6,10,11,4,10,15,14,6,18,22 1,2,3,5,7,9,8,11,12 51 13 2,21 4,6,10,11,4,10,15,14,6,18,22,21 1,2,3,5,7,9,8,11,12,13 3,15 6,10,11,4,10,15,14,6,18,22,21,15 1,2,3,5,7,9,8,11,12,13,4 5,10,11,19 10,11,4,10,15,14,6,18,22,21,15,10, 19 1,2,3,5,7,9,8,11,12,13,4,6 10 5,6,9,17 11,4,10,15,14,6,18,22,21,15,10,19, 17 1,2,3,5,7,9,8,11,12,13,4,6,10 11(đã xét) 4,10,15,14,6,18,22,21,15,10,19,17 1,2,3,5,7,9,8,11,12,13,4,6,10 4(đã xét) 10,15,14,6,18,22,21,15,10,19,17 1,2,3,5,7,9,8,11,12,13,4,6,10 10(đã xét) 15,14,6,18,22,21,15,10,19,17 1,2,3,5,7,9,8,11,12,13,4,6,10 15 4,9,16 14,6,18,22,21,15,10,19,17,16 1,2,3,5,7,9,8,11,12,13,4,6,10,15 14 8,22 6,18,22,21,15,10,19,17,16,22 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14 18,22,21,15,10,19,17,16,22 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14 (đã xét) 18 11,21,25 22,21,15,10,19,17,16,22,11,21,25 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18 22 12,14,21,27 21,15,10,19,17,16,22,11,21,25,21,2 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22 21 13,18,22 15,10,19,17,16,22,11,21,25,21,27 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21 15(đã xét) 10,19,17,16,22,11,21,25,21,27 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21 10(đã xét) 19,17,16,22,11,21,25,21,27 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21 17,16,22,11,21,25,21,27,23,24 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19 19 6,23,24 52 17 10,16,24 16,22,11,21,25,21,27,23,24,16,24 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17 16 15,20 22,11,21,25,21,27,23,24,16,24,20 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16 22(đã xét) 11,21,25,21,27,23,24,16,24,20 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16 11(đã xét) 21,25,21,27,23,24,16,24,20 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16 21(đã xét) 25,21,27,23,24,16,24,20 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16 21,27,23,24,16,24,20,27,28,29 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25 27,23,24,16,24,20,27,28,29 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25 25 18,27,28,29 21(đã xét) 27 22,25,29 23,24,16,24,20,27,28,29,29 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27 23 19,28 24,16,24,20,27,28,29,29,28 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23 24 17,19,30 16,24,20,27,28,29,29,28,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 16(đã xét) 24,20,27,28,29,29,28,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 24(đã xét) 20,27,28,29,29,28,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 27,28,29,29,28,30,26 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20 20 16,26 53 27(đã xét) 28,29,29,28,30,26,29 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20 28 23,25,29,30 29,29,28,30,26,29,29,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28 29 25,27,28 29,28,30,26,29,29,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29 29(đã xét) 28,30,26,29,29,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29 28(đã xét) 30,26,29,29,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29 30 24,26,28 26,29,29,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29,30 26 20,30 29,29,30,20,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29,30,26 29(đã xét) 29,30,20,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29,30,26 29(đã xét) 30,20,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29,30,26 30(đã xét) 20,30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29,30,26 20(đã xét) 30 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 54 4,20,28,29,30,26 30(đã xét) 1,2,3,5,7,9,8,11,12,13,4,6,10,15, 14,18,22,21,19,17,16,25,27,23,2 4,20,28,29,30,26 Vậy kết duyệt BFS là : User1  User2  User3  User5  User7  User9  User8  User11  User12  User13  User4  User6  User10  User15  User14  User18  User22  User21  User19  User17  User16  User25  User27  User23  User24  User20  User28  User29  User30  User26 Duyệt đồ thị DFS : Đỉnh Đỉnh kề Stack Kết 2,3,5,7,9 2,3,5,7,9 1,4,10,15 2,3,5,7,4,10,15 1,9 15 4,9,16 2,3,5,7,4,10,4,16 1,9,15 16 15,17,20 2,3,5,7,4,10,4,17,20 1,9,15,16 20 16,26 2,3,5,7,4,10,4,17,26 1,9,15,16,20 26 20,30 2,3,5,7,4,10,4,17,30 1,9,15,16,20,26 30 24,26,28 2,3,5,7,4,10,4,17,24,28 1,9,15,16,20,26,30 28 23,25,29,30 2,3,5,7,4,10,4,17,24,23,25,29 1,9,15,16,20,26,30,28 29 25,27,28 2,3,5,7,4,10,4,17,24,23,25,25,27 1,9,15,16,20,26,30,28,29 27 22,25,29 2,3,5,7,4,10,4,17,24,23,25,25,22,25 1,9,15,16,20,26,30,28,29,27 25 18,27,29,28 2,3,5,7,4,10,4,17,24,23,25,25,22,18 1,9,15,16,20,26,30,28,29,27,25 18 11,21,25 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,21 1,9,15,16,20,26,30,28,29,27,25,1 21 13,18,22 2,3,5,7,4,10,4,17,24,23,25,25,22,11 1,9,15,16,20,26,30,28,29,27,25,1 55 ,13,22 8,21 22 12,14,21,27 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,14 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22 14 8,22 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,8 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14 2,14 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,2 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8 1,8,11,12,1 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,11,12,13 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2 13 2,21 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,11,12 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13 12 2,22 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,11 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12 11 2,5,6,18 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,6 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11 5,10,11,19 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,5,10,19 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6 19 6,23,24 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,5,23,24 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19 24 17,19,30 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,5,23 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24 17 10,16,24 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,5,23,10 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17 10 5,6,9,17 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,5,23,5 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10 1,6,10,11 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,5,23 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5 56 23 19,28 5,5,1 2,13, 11,22 ,25,2 5,23, 24,17 (đã duyệt ) 2,3,5,7,4,10,4,17,24,23,25,25,22,11 ,13,12,5,5 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5,23 2,3,5,7,4,10,4 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5,23 3,9,15 2,3,5,7,4,10,3 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5,23,4 1,4 2,3,5,7,4,10 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5,23,4,3 2,3,5,7 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5,23,4,3 2,3,5 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5,23,4,3,7 10,4 (đã duyệt ) 2,3,5 (đã duyệt ) 1,9,15,16,20,26,30,28,29,27,25,1 8,21,22,14,8,2,13,12,11,6,19,24, 17,10,5,23,4,3,7 Vậy kết duyệt DFS : User1  User9  User15  User16  User20  User26  User30  User28  User29  User27  User25  User18  User21  User22  User14  User8  User2  User13  User12  User11  User6  57 User19  User24  User17  User10  User5  User23  User4  User3  User7 5.2Thực hành public class Friend { private User u; private User v; private int w; public Friend(User u, User v, int w) { this.u = u; this.v = v; this.w = w; } public User getUser() { return u; } public User getFriendOfUser() { return v; } public int getW() { return w; } } public String toString() { return u + " - " + v; } public class User { private String userID; 58 private String name; private String gioiTinh; private int age; private String job; public User() {} public User(String userID, String name, String gioiTinh, int age, String job) { this.userID = userID; this.name = name; this.gioiTinh = gioiTinh; this.age = age; this.job = job; } public String getUserID() { return userID; } public void setUserID(String userID) { this.userID = userID; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getGT() { return gioiTinh; } public void setGT(String gioiTinh) { 59 } this.gioiTinh = gioiTinh; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getJob() { return job; } public void setJob(String job) { this.job = job; } @Override public String toString() { return "User[" + userID + ", " + name + ", " + gioiTinh + ", " + age + ", " + job + "]"; } } import java.util.*; import java.io.*; public class UserManagement { private ArrayList userList; private ArrayList edges; public UserManagement(String userPath, String friendPath) throws FileNotFoundException { userList = new ArrayList(); edges = new ArrayList(); 60 } readUserFile(userPath); buildGraph(friendPath); public User getUser(int no) { return userList.get(no); } public boolean readUserFile(String file) throws FileNotFoundException{ BufferedReader userReader = new BufferedReader(new FileReader(file)); String line; try { while((line = userReader.readLine()) != null) { String[] items = line.split(","); userList.add(new User( items[0], items[1], items[2], Integer.parseInt(items[3]), items[4] )); } userReader.close(); } catch (IOException exception) { exception.printStackTrace(); return false; } return true; } Public boolean buildGraph(String file) throws FileNotFoundException{ BufferedReader graphReader = new BufferedReader((new FileReader(file))); String line; 61 } try { while((line = graphReader.readLine()) != null) { String[] items = line.split(" "); User user1 = new User(); User user2 = new User(); for (User u : userList) { if (u.getUserID().equals(items[0])) user1 = u; if(u.getUserID().equals(items[1])) user2 = u; } addEdge(user1, user2, Integer.parseInt(items[2])); } graphReader.close(); } catch (IOException exception) { exception.printStackTrace(); return false; } return true; public void addEdge(User u, User v, int w) { edges.add(new Friend(u,v,w)); } public void printGraph(){ for(int i = 0; i < edges.size(); i++) System.out.println(edges.get(i)); } public ArrayList findFriend(User u) { ArrayList friendOfUser = new ArrayList(); for (Friend f : edges) if (u.equals(f.getUser())) friendOfUser.add(f.getFriendOfUser()); return friendOfUser; } 62 } public int countCommonFriends(User u, User u1) { ArrayList friendOfUser1 = findFriend(u); ArrayList friendOfUser2 = findFriend(u1); int count = 0; for (User f : friendOfUser1) if (friendOfUser2.contains(f)) count += 1; return count; } import java.io.FileNotFoundException; public class Main { public static void main(String[] args) throws FileNotFoundException { UserManagement user = new UserManagement("User.txt", "Friends.txt"); System.out.println(" Users List -"); user.printGraph(); System.out.println(" Find Friend "); System.out.println("Friend of User: "); for (User u : user.findFriend(user.getUser(0))) { System.out.println(u); } System.out.println(" Common Friends "); System.out.println("Number of common friends of user and user 2: " + user.countCommonFriends(user.getUser(4), user.getUser(5))); } } TÀI LIỆU THAM KHẢO 63 PHỤ LỤC ...TỔNG LIÊN ĐOÀN LAO ĐỘNG VIỆT NAM TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG KHOA CÔNG NGHỆ THÔNG TIN ĐỒ ÁN CUỐI KÌ MƠN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT BÁO CÁO CUỐI KỲ TỔNG HỢP MÔN CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT... thức: 10 + (2 * (9 – 1) + 3) – 1/3 86/3 34 IV Cấu trúc liệu Danh sách Cây 4.1Lý thuyết Thêm Xóa Khi thêm vào phải Khi xóa phải tái tái cấu trúc lại cấu trúc lại mảng mảng Tìm kiếm Có thể thực tìm... quy (diễn giải, vẽ đệ quy với ví dụ gồm lần gọi đệ quy): i Nhóm 1: • Giải tốn xy • Giải tốn tính tổng chữ số số nguyên dương gồm

Ngày đăng: 08/02/2022, 20:37

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

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

TÀI LIỆU LIÊN QUAN

w