CTT005 – LÝ THUYẾT ĐỒ THỊ (hệ Đào tạo từ xa) ĐỒ ÁN MÔN HỌC Nội dung đồ án Xây dựng ứng dụng phân tích đồ thị nhằm hỗ trợ người dùng tìm hiểu thơng tin đồ thị xét Học viên xây dựng ứng dụng chế độ console, không thiết sử dụng giao diện đồ họa Các chức ứng dụng mô tả cụ thể bên Chức – Đọc liệu đầu vào Cho đồ thị có hướng, khơng chứa cạnh bội khơng chứa cạnh khuyên, cạnh đồ thị có trọng số ÂM Ma trận kề biểu diễn đồ thị lưu tập tin input.txt có định dạng sau: Dòng chứa số nguyên n thể số đỉnh đồ thị n dòng tiếp theo, dòng gồm n số nguyên, gọi số nguyên dòng i cột j [i, j], [i, j] = x: có cạnh nối từ đỉnh i đến đỉnh j với trọng số x (x số nguyên), [i, j] = 0: khơng có cạnh nối i j Hãy tạo hai ma trận kề từ ma trận kề cho theo mô tả bên lưu vào tập tin có tên theo quy định: Trọng số âm x chuyển thành -x (tức giá trị dương đối xưng) để tạo đồ thị khơng có cạnh âm, lưu ma trận kề vào tập tin input_nonnegative.txt Tiếp tục chuyển đồ thị từ có hướng thành vơ hướng, lưu ma trận kề vào tập tin input_nonnegative_nondirected.txt Chức – Khảo sát tính chất đồ thị Dữ liệu đầu vào: tập tin input.txt input_nonnegative_nondirected.txt (chưa cần quan tâm đến trọng số) Mô tả chức năng: gọi A ma trận kề đọc từ tập tin input.txt B ma trận kề đọc từ tập tin input_nonnegative_nondirected.txt, xuất hình kết tất yêu cầu sau a) Sử dụng ma trận A Xác định đồ thị vô hướng hay có hướng cách kiểm tra tính chất ma trận kề Xác định số lượng đỉnh, số lượng cạnh, bậc vào-bậc đỉnh đồ thị b) Sử dụng ma trận B Kiểm tra đồ thị có phải đồ thị đầy đủ Kn, phải n bao nhiêu? Kiểm tra đồ thị có phải đồ thị n-chính quy, phải n bao nhiêu? Chức – Xác định khung nhỏ Dữ liệu đầu vào: tập tin input_nonnegative_nondirected.txt Mô tả chức năng: xuất hình kết tất yêu cầu sau a) Kiểm tra đồ thị có liên thơng hay khơng? b) Nếu đồ thị liên thơng, áp dụng thuật tốn Prim để xác định danh sách cạnh (kèm trọng số tương ứng) thuộc khung nhỏ tổng trọng số c) Thực tương tự yêu cầu b) thay thuật toán Prim thuật toán Kruskal Chức – Xác định đường ngắn Dữ liệu đầu vào: tập tin input.txt input_nonnegative.txt Mô tả chức năng: xuất hình đường ngắn chi phí đường cho yêu cầu a) b), trình bày vào báo cáo trả lời cho yêu cầu c) a) Lần lượt áp dụng thuật tốn Dijkstra Bellman để tìm đường ngắn đồ thị biểu diễn ma trận kề tập tin input.txt b) Thực tương tự yêu cầu a) thay tập tin input.txt input_nonnegative.txt c) Nhận xét bốn đường tìm yêu cầu a) b) Chức – Chức cộng điểm Các yêu cầu độc lập với Học viên tùy chọn hay nhiều yêu cầu để đạt điểm cộng a) Dữ liệu đầu vào: tập tin input_nonnegative.txt Xác định loại liên thơng đồ thị có hướng: liên thông mạnh, liên thông yếu, liên thông phần, hay không liên thông b) Dữ liệu đầu vào: tập tin input_nonnegative_nondirected.txt Xác định khung lớn cách hiệu chỉnh thuật toán Prim thuật toán Kruskal c) Dữ liệu đầu vào: tập tin input_nonnegative.txt Tìm đường ngắn chi phí đường thuật toán Floyd (xem tài liệu Huong_dan_08_Floyd.pdf) d) Dữ liệu đầu vào: tập tin input_nonnegative_nondirected.txt Kiểm tra đồ thị có phải đồ thị Euler hay khơng? Nếu phải in hình chu trình Euler Nếu khơng phải tiếp tục kiểm tra đồ thị có phải đồ thị nửa Euler hay không? Nếu đồ thị nửa Euler in hình đường Euler e) Xây dựng giao diện đồ họa, thân thiện với người dùng LƯU Ý: Học viên tham khảo code gợi ý giáo viên không chép nguyên văn Nếu vi phạm bị trừ điểm phần chức chép Thang điểm Chức Chức Chức Chức Chức (cộng điểm) * Mỗi yêu cầu nhỏ chức tính điểm điểm điểm điểm điểm điểm