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

Đồ án công nghệ thông tin đồ thị

33 0 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

Tiêu đề Đồ án công nghệ thông tin đồ thị
Tác giả Nguyễn Huy, Lê Việt Khánh
Người hướng dẫn THS Nguyễn Quang Ngọc
Trường học Trường Đại học Sư phạm Kỹ thuật TPHCM
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án
Năm xuất bản 2023
Thành phố Thành phố Hồ Chí Minh
Định dạng
Số trang 33
Dung lượng 859,37 KB

Nội dung

Thầy đã đưa ra những gợi ý và hướng dẫn quý báu để giúp chúng em hiểu được những vấn đề phức tạp liên quan đến đồ án bên cạnh việc trình bày một cách hiệu quả.. Đặc tả Định nghĩa Trong t

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TPHCM

KHOA ĐÀO TẠO CHẤT LƯỢNG CAO

ĐỒ ÁN CÔNG NGHỆ THÔNG TIN

Trang 2

2

Tổng quan

Chúng em muốn gửi lời cảm ơn chân thành đến thầy Nguyễn Quang Ngọc, người phụ trách

dự án, đã hướng dẫn chúng em thực hiện đồ án Thầy đã đưa ra những gợi ý và hướng dẫn quý báu để giúp chúng em hiểu được những vấn đề phức tạp liên quan đến đồ án bên cạnh việc trình bày một cách hiệu quả Đồ án của chúng em đã hoàn thành nhờ sự hướng dẫn của thầy

Đồ án này được thực hiện trong vòng mười bốn tuần, vừa đủ để hoàn thành nó Tuy nhiên,

do thời gian chúng em thực hiện mỗi tuần không tối ưu nên đồ án sẽ mắc nhiều sai sót là điều khó tránh khỏi Chúng em rất mong nhận được mọi ý kiến đóng góp của thầy để giúp kiến thức còn hạn chế của chúng em được tốt hơn

Chúng em xin cảm ơn

Trang 3

3

Trang 4

4

Mục l c ụ

Tổng quan

Mục lục bảng

I Đặc tả

Định nghĩa

II Phân chia công việc

III Thiết kế

1 Biểu diễn đồ thị

2 Một ứng dụng của đồ thị 1

IV Tổng kết

1 Sinh viên tự đánh giá 2

2 Khó khan

3 Ưu điểm

4 Hạn chế

5 Ý tưởng phát triển 2

Trang 5

5

Mục lục bảng

Bảng phân chia công việc

Trang 6

Đồ thị G là một bộ (V, E), với V là tập khác ∅, hữu hạn các phần tử được gọi là các đỉnh, E là tập các phần tử được gọi là các cạnh Mỗi phần tử e E liên kết với duy nhất ∈

một cặp đỉnh v, w V và được ký hiệu e = (v,∈ w), v, w ∈ V

e = (v, w) được gọi là cạnh kề của hai đỉnh v và w v và w là các đỉnh kề nhau (v kề với w) e1 = (v, w) và e2 = (v, w), e1 và e2 được gọi là 2 cạnh song song -

e = (v, v) được gọi là một khuyên hay vòng

d(v), gọi là bậc của đỉnh v, là số cạnh kề với v Nếu đỉnh v có vòng thì vòng được tính

là 2

Đỉnh có bậc bằng 0 được gọi là đỉnh cô lập

Đỉnh có bậc bằng 1 được gọi là đỉnh treo

Trang 7

7

II Phân chia công việc

Thứ tự Tên sinh viên Công việc Đóng góp

1 Lê Việt Khánh Tạo một đồ thị 100%

2 Nguyễn Huy Thêm một đỉnh vào

5 Lê Việt Khánh Xuất ma trận kề 100%

6 Nguyễn Huy Duyệt đồ thị theo

10 Nguyễn Huy Tạo mê cung 100%

11 Lê Việt Khánh Tìm đường ra khỏi

Trang 8

8

III Thiết kế

1 Biểu diễn đồ thị

Các thư viện:

<unordered_map>: Được sử dụng để lưu trữ thông tin về các đỉnh (vertices) của đồ thị

và thông tin về các cạnh thông qua cấu trúc dữ liệu không có thứ tự (unordered_map) <queue>: Được sử dụng để triển khai thuật toán duyệt đồ thị theo chiều rộng (BFS) Queue được sử dụng để duyệt qua các đỉnh theo thứ tự FIFO

<stack>: Được sử dụng để triển khai thuật toán duyệt đồ thị theo chiều sâu (DFS) Stack được sử dụng để duyệt qua các đỉnh theo thứ tự LIFO

<limits>: Sử dụng để đặt giá trị vô cùng (infinity) cho việc tính toán đường đi ngắn nhất trong thuật toán Dijkstra

<string>: Sử dụng để biểu diễn dữ liệu của đỉnh (vertex) trong đồ thị

<cstdlib> và <ctime>: Sử dụng để tạo số ngẫu nhiên khi tạo mê cung trong hàm createMaze Hàm rand() được sử dụng để sinh số ngẫu nhiên, và srand() được sử dụng

để khởi tạo seed cho generator số ngẫu nhiên

Trang 9

unordered_map<int, Vertex<T>> vertices;

unordered_map<int, unordered_map<int, int>> adjacencyMatrix; // Su dung ma tran ke

Thêm một đỉnh vào đồ thị đã có

public:

// Them dinh vào do thi

void addVertex(int id, T data) {

Trang 10

Xuất các tên đỉnh, tên cạnh

// Xuat danh sach dinh

void displayVertices() {

cout << "Ten dinh:" << endl;

for (const auto& vertex : vertices) {

cout << "Dinh " << vertex.first << ": " << vertex.second.data << endl; }

}

Trang 11

11

Xuất ma trận kề

void displayAdjacencyMatrix() {

cout << "Ma tran ke:" << endl;

for (const auto& row : adjacencyMatrix) {

cout << "Tu dinh " << row.first << ": ";

for (const auto& neighbor : row.second) {

cout << neighbor.first << "(" << neighbor.second << ") ";

}

cout << endl;

}

}

Trang 12

12

Duyệt đồ thị theo chiều rộng:

void BFS(int start) {

unordered_map<int, bool> visited;

Trang 13

13

void DFS(int start) {

unordered_map<int, bool> visited;

for (const auto& neighbor : adjacencyMatrix[current]) {

int vertex = neighbor.first;

Trang 14

14

Đường đi ngắn nhất từ đỉnh v đến đỉnh w, sử dụng thuật toán Dijkstra

void Dijkstra(int v, int w) {

unordered_map<int, int> distance;

priority_queue<pair<int, int>, deque<pair<int, int>>, greater<pair<int, int>>> pq;

for (const auto& vertex : vertices) {

for (const auto& neighbor : adjacencyMatrix[u]) {

int vertex = neighbor.first;

int weight = neighbor.second;

if (distance[vertex] > distance[u] + weight) {

distance[vertex] = distance[u] + weight;

Trang 15

bool hasEdge(int v, int w) {

return adjacencyMatrix[v].find(w) != adjacencyMatrix[v].end();

}

Trang 16

16

2 Một ứng dụng của đồ thị

Tạo mê cung

void createMaze(int start) {

unordered_map<int, bool> visited;

unordered_map<int, bool> unvisitedNeighbors;

for (const auto& neighbor : adjacencyMatrix[current]) {

Trang 17

cout << "Me cung duoc tao tu dinh " << start << ":" << endl;

for (int i = 0; i < index; ++i) {

cout << visitedVertices[i] << " ";

}

cout << endl;

}

Trang 18

18

Tìm đường ra khỏi mê cung

// Tim duong ra khoi me cung tu v den w

void findExitFromMaze(int v, int w) {

unordered_map<int, bool> visited;

cout << "Duong di tu dinh " << v << " den dinh " << w << ":" << endl;

for (int i = 0; i < index; ++i) {

Trang 19

19

}

}

if (stack.empty() && path[index - 1] != w) {

// Quay lai neu không tim thay neighbor va duong di chua tim duoc

Trang 20

20

IV Tổng kết

1 Sinh viên tự đánh giá

Hoàn thành các yêu cầu cơ bản

Code tưởng đối sạch

GUI vẫn còn quá đơn giản

Cần bổ sung thêm nhiều chức năng

5 Ý tưởng phát triển

Thêm các giao diện cho chương trìn

Trang 21

21

Trang 22

22

Trang 23

23

Trang 24

24

Trang 25

25

Trang 26

26

Trang 27

27

Trang 28

28

Trang 29

29

Trang 30

30

Trang 31

31

Trang 32

32

Trang 33

33

Ngày đăng: 09/04/2024, 16:15

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

TÀI LIỆU LIÊN QUAN

w