IẾP TỤC CHƯƠNG 2 CỦA MÔN TOÁN RỜI RẠC MÌNH SẼ GỬI DẾN D CÁC BẠN SLIDE BÀI GIẢNG CHƯƠNG 3.2 MÔN TOÁN RỜI RẠC CỦA TRƯỜNG ĐẠI HỌC MỎ ĐỊA CHẤT MONG RẰNG VỚI CÁC SLIDE NÀY SẼ GIÚP CÁC BẠN DỄ DÀNG CHINH PHỤC ĐƯỢC MÔN TOÁN RỜI RẠC NÀY
CHƯƠNG 3: LÝ THUYẾT ĐỒ THỊ GV: Đặng Hữu Nghị Sđt: 0989640319 Email: nghidanghuu@gmail.com NỘI DUNG 3.1 •Các khái niệm lý thuyết đồ thị 3.2 •Biểu diễn đồ thị máy tính 3.3 •Các thuật tốn tìm kiếm đồ thị 3.4 •Đồ thị Euler đồ thị Hamilton 3.5 •Cây khung đồ thị 3.6 •Bài tốn đường ngắn 3.7 •Bài tốn luồng cực đại mạng BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH 3.2.1 Ma trận kề Ma trận trọng số 3.2.2 Ma trận liên thuộc đỉnh - cạnh 3.2.3 Danh sách cạnh (cung) 3.2.4 Danh sách kề 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Xét đơn đồ thị vô hướng G = (V, E), với tập đỉnh V = {1, 2, , n}, tập cạnh E = {e1, e2, …, em} Ta gọi ma trận kề đồ thị G (0, l) - ma trận A = {aij : i,j = 1, 2, 3,…, n} Với phần tử xác định theo quy tắc sau đây: aij = 0, (i, j) E aij = (i, j) ϵ E Với i, j = 1, 2, …, n 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Ví dụ: 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Các tính chất ma trận kề: 1) ma trận kề đồ thị vô hướng ma trận đối xứng, tức a[i,j] = a[j, i]; i, j = 1, 2,…, n 2) Nếu G đồ thị vô hướng A ma trận liền kề tương ứng ma trận A: Tổng số hàng i = Tổng số cột i = Bậc đỉnh i = deg(i) 3) Nếu G đồ thị có hướng A ma trận liền kề tương ứng ma trận A: • Tổng số hàng i = Bán bậc đỉnh i = deg+(i) • Tổng số cột i = Bán bậc vào đỉnh i = deg-(i) 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Ma trận kề đồ thị có hướng định nghĩa cách hoàn toàn tương tự Lưu ý ma trận kề đồ thị có hướng khơng phải ma trận đối xứng 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Chú ý: Trên xét đơn đồ thị Ma trận kề đa đồ thị xây dựng hồn tồn tương tự, khác thay ghi vào vị trí a[i, j] (i, j) cạnh đồ thị, ghi k số cạnh nối hai đỉnh i j 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Ví dụ 1: 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Ví dụ 2: 10 BT Hãy vẽ đồ thị ma trận liên thuộc sau 20 3.2.3 DANH SÁCH CẠNH (CUNG) Trong trường hợp đồ thị thưa (đồ thị có số cạnh m thoả mãn bất đẳng thức: m < 6n) người ta thường dùng cách biểu diễn đồ thị dạng danh sách cạnh Trong cách biểu diễn đồ thị danh sách cạnh (cung) lưu trữ danh sách tất cạnh (cung) đồ thị Một cạnh (cung) e=(x,y) đồ thị tương ứng với hai biến Dau[e], Cuoi[e] Để lưu trữ đồ thị ta cần sử dụng 2m đơn vị nhớ Nhược điểm: để tìm đỉnh kề với đỉnh cho trước phải làm m phép so sánh (khi duyệt qua danh sách tất cạnh đồ thị) Trong trường hợp đồ thị có trọng số ta cần thêm m đơn vị nhớ để lưu trữ trọng số cạnh 21 3.2.3 DANH SÁCH CẠNH (CUNG) 22 3.2.3 DANH SÁCH CẠNH (CUNG) Biểu diễn đồ thị trọng số danh sách cạnh: Bổ sung thêm cột trọng số cạnh 23 3.2.3 DANH SÁCH CẠNH (CUNG) Khuôn dạng lưu trữ danh sách cạnh Dòng ghi lại số N, M tương ứng với số đỉnh số cạnh đồ thị Hai số viết cánh vài khoảng trống M dòng kế tiếp, dòng ghi lại cạnh đồ thị Đỉnh đầu đỉnh cuối cạnh viết cách vài khoảng trống 24 3.2.4 DANH SÁCH KỀ Trong cách biểu diễn dạng danh sách kề, với đỉnh v đồ thị lưu trữ danh sách đinh kề với nó, mà ta ký hiệu Ke(v), tức là: Ke(v) = { u ϵ V : ( v , u ) ϵ E } Khi vịng lặp thực với phần tử danh sách theo thứ tự phần tử xắp xếp viết sau: For u ϵ Ke(v) 25 3.2.4 DANH SÁCH KỀ Biểu diễn danh sách kề dựa vào mảng Mảng chia thành n đoạn Đoạn thứ i mảng lưu trữ danh sách kề đỉnh thứ i ϵV Để biết đoạn thuộc mảng phần tử đến phần tử ta sử dụng mảng khác dùng để lưu trữ vị trí phần tử bắt đầu kết thúc đoạn 26 3.2.4 DANH SÁCH KỀ Trong nhiều thuật toán làm việc với đồ thị thường xuyên phải thực thao tác: Thêm bớt số cạnh Trong trường hợp cấu trúc dũ liệu dùng không thuận tiện Khi nên chuyển sang sử dụng danh sách kề liên kết (Linked Adjancency List) 27 3.2.4 DANH SÁCH KỀ Biểu diễn danh sách kề danh sách liên kết Danh sách kề đồ thị hình mô tả sau: 28 3.2.4 DANH SÁCH KỀ 29 3.2.4 DANH SÁCH KỀ #include #include using namespace std; #define max 100 struct Node { int v; Node *next; Node() { next=NULL; } }; 30 3.2.4 DANH SÁCH KỀ int main() { int j,x,y,m,n; Node *t; Node *Ke[max]; printf("Nhap so dinh va canh cua thi: "); scanf("%d %d",&n,&m); for(j=1;jnext= Ke[y];Ke[y]=t; t=new Node; t->v=y;t->next= Ke[x];Ke[x]=t; } 32 3.2.4 DANH SÁCH KỀ printf("\nDanh sach ke cua cac dinh cua thi: "); for(j=1; jnext != NULL) { printf("%6d",t->v); t=t->next; } } } 33 ➢ n2 Đơn vị nhớ ➢ Dễ kiểm tra đ/k kề ➢ 2m Đơn vị nhớ ➢ Đồ thị thưa ➢ Khó kiểm tra đ/k kề ➢ 2m+n Đơn vị nhớ ➢ Dễ dàng việc thêm bớt cạnh,đỉnh ➢ m*n Đơn vị nhớ ➢ Dễ dàng việc thêm bớt cạnh, đỉnh 34 ... mạng BIỂU DIỄN ĐỒ THỊ TRÊN MÁY TÍNH 3.2.1 Ma trận kề Ma trận trọng số 3.2.2 Ma trận liên thuộc đỉnh - cạnh 3.2.3 Danh sách cạnh (cung) 3.2.4 Danh sách kề 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ... (i, j) cạnh đồ thị, ghi k số cạnh nối hai đỉnh i j 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Ví dụ 1: 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Ví dụ 2: 10 3.2.1 MA TRẬN KỀ MA TRẬN TRỌNG SỐ Ma trận trọng số:... lưu trữ trọng số cạnh 21 3.2.3 DANH SÁCH CẠNH (CUNG) 22 3.2.3 DANH SÁCH CẠNH (CUNG) Biểu diễn đồ thị trọng số danh sách cạnh: Bổ sung thêm cột trọng số cạnh 23 3.2.3 DANH SÁCH CẠNH (CUNG)