1. Trang chủ
  2. » Giáo án - Bài giảng

Ôn thi cao học Học viện Bưu chính Viễn Thông Bài giải Lý thuyết đồ thị

17 414 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 17
Dung lượng 374 KB

Nội dung

Đề và bài giải ôn thi cao học vào Học viện công nghệ bưu chính viễn thông

BÀI TẬP ÔN THI CAO HỌC - 2012 -*** PHẦN 2: THUYẾT ĐỒ THỊ *** -*Vấn đề 1: Duyệt đồ thị (DFS & BFS) Bài 1: a) Trình bày thuật toán duyệt theo chiều sâu đơn đồ thị vô hướng b) Cho đơn đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 Hãy áp dụng thuật toán duyệt theo chiều sâu để tìm thành phần liên thông cho biết thành phần liên thông gồm đỉnh HD: a) #include const max=20;//so dinh toi da int n;//so dinh cua thi int a[max][max];//ma tran ke int tham[max];//mang de danh dau dinh tham roi int stplt=0;//so phan lien thong char *src="d:/dfs.txt";//tap tin luu ma tran ke void DocFile(){ int i,j ; FILE *f= fopen(src,"r");//mo file thi de doc fscanf(f,"%d",&n);//doc so dinh la n printf("%d",n); for(i=1;i kg lt mạnh + Chứng tỏ đồ thị có hướng liên thông yếu: xây dựng ma trận kề đồ thị vô hướng tương ứng Duyệt DFS/BFS với đỉnh xp bất kỳ, thăm tất đỉnh => lt yếu Bài 6: Cho đơn đồ thị có hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 Hãy trình bày bước sử dụng thuật toán DFS/BFS để chứng tỏ đồ thị liên thông mạnh HD: Chứng tỏ đồ thị có hướng liên thông mạnh: duyệt DFS/BFS với tất đỉnh xp, tất lần duyệt thăm tất đỉnh khác liên thông mạnh -* Vấn đề 2: Đồ thị Euler & Hamilton Euler Đường qua tất cạnh, cạnh qua lần gọi đường Euler Chu trình qua qua tất cạnh, cạnh qua lần gọi chu trình Euler Đồ thị gọi đồ thị Euler có chu trình Euler, gọi đồ thị nửa Euler có đường Euler Mọi đồ thị Euler nửa Euler, điều ngược lại không Hamilton Đường qua tất đỉnh, đỉnh qua lần gọi đường Hamilton Chu trình qua qua tất đỉnh, đỉnh qua lần (trừ đỉnh xp) gọi chu trình Hamilton Đồ thị gọi đồ thị Hamilton có chu trình Hamilton, gọi đồ thị nửa Hamilton có đường Hamilton Mọi đồ thị Hamilton nửa Hamilton, điều ngược lại không -Bài 1: a) Phát biểu điều kiện cần đủ để đồ thị vô hướng đồ thị Euler b) Cho đơn đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 Chứng tỏ G đồ thị Euler HD: a) Đồ thị vô hướng G đồ thị Euler G liên thông đỉnh G có bậc số chẵn b) Để chứng tỏ G đồ thị Euler, ta thực hai bước: + Chứng tỏ G liên thông: sử dụng thuật toán DFS/BFS, duyệt G với đỉnh xp Nếu thăm tất đỉnh G liên thông, ngược lại không liên thông + Chứng tỏ tất đỉnh G có bậc số chẵn ( Bậc đỉnh i tổng phần tử hàng i cột i ma trận kề) Bài 2: a) Phát biểu điều kiện cần đủ để đồ thị vô hướng đồ thị nửa Euler b) Cho đơn đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 Chứng tỏ G đồ thị nửa Euler HD: a) Đồ thị vô hướng G đồ thị nửa Euler G liên thông G hai đỉnh bậc lẻ (số đỉnh bậc lẻ 2) b) Để chứng tỏ G đồ thị nửa Euler, ta thực hai bước: + Chứng tỏ G liên thông: sử dụng thuật toán DFS/BFS, duyệt G với đỉnh xp Nếu thăm tất đỉnh G liên thông, ngược lại không liên thông + Chứng tỏ G có số đỉnh bậc lẻ ( Bậc đỉnh i tổng phần tử hàng i cột i ma trận kề) Bài 3: a) Giả sử đồ thị có chu trình Euler, trình bày thuật toán tìm chu trình Euler b) Cho đơn đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 0 Chứng tỏ đồ thị có chu trình Euler trình bày bước thực theo thuật toán câu a để tìm chu trình Euler đỉnh HD: a) Thuật toán tìm chu trình Euler: void EulerCycle(){ stack= φ ; CE= φ ;// CE la tap chua cac dinh theo thu tu cua chu trinh Euler Chọn đỉnh xp cất vào stack Trong stack khác rỗng{ Gọi x phần tử đỉnh stack ; Nếu (x đỉnh kề){ Chọn đỉnh y kề x, cất y vào stack; Loại bỏ cạnh (x,y) khỏi đồ thị } Ngược lại{ //x khong dinh ke Lấy x khỏi stack ; cất x vào CE } } in tập CE theo thứ tự ngược } b) Chứng tỏ đồ thị có chu trình Euler trình bày bước thực để tìm chu trình Euler đỉnh * Để chứng tỏ G đồ thị Euler, ta thực hai bước: + Chứng tỏ G liên thông: sử dụng thuật toán DFS/BFS, duyệt G với đỉnh xp Nếu thăm tất đỉnh G liên thông, ngược lại không liên thông + Chứng tỏ tất đỉnh G có bậc số chẵn ( Bậc đỉnh i tổng phần tử hàng i cột i ma trận kề) * Trình bày bước tìm chu trình Euler: vẽ stack (nên vẽ stack theo chiều ngang) Stack: 1 2 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2 2 2 2 2 2 2 2 6 6 6 6 6 6 6 6 6 6 6 6 5 5 5 5 5 5 5 5 5 5 5 1 1 1 1 1 1 1 1 1 1 8 8 8 8 8 8 8 8 8 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 8 10 10 10 10 10 10 10 10 10 10 10 5 5 5 9 10 9 CE:1 8 10 10 Bài 4: a) Giả sử đồ thị có đường Euler, trình bày thuật toán tìm đường Euler b) Cho đơn đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 1 0 0 0 0 Chứng tỏ đồ thị có đường Euler trình bày bước thực theo thuật toán câu a để tìm đường Euler HD: a) Thuật toán tìm đường Euler giống thuật toán tìm chu trình Euler phải xuất phát từ đỉnh bậc lẻ b) vẽ stack để trình bày thuật toán (nên vẽ stack theo chiều ngang) xuất phát từ đỉnh bậc lẻ Bài 5: Cho đa đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 1 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 Chứng tỏ đồ thị có chu trình Euler trình bày bước thực theo thuật toán để tìm chu trình Euler đỉnh HD: A[1][2]=4 nghĩa có cạnh (1,2) Bài 6: Cho đa đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 2 0 0 0 1 0 0 0 1 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 Chứng tỏ đồ thị có đường Euler trình bày bước thực theo thuật toán để tìm đường Euler Bài 7: a) Phát biểu điều kiện cần đủ để đồ thị có hướng đồ thị Euler b) Cho đơn đồ thị có hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 Chứng tỏ đồ thị có chu trình Euler trình bày bước thực theo thuật toán câu b để tìm chu trình Euler đỉnh HD: a) Đồ thị có hướng G đồ thị Euler G liên thông yếu đỉnh G có bán bậc vào bán bậc Bài 8: a) Phát biểu điều kiện cần đủ để đồ thị có hướng đồ thị nửa Euler b) Cho đơn đồ thị có hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 Chứng tỏ đồ thị có đường Euler trình bày bước thực theo thuật toán để tìm đường Euler HD: a) Đồ thị có hướng G đồ thị nửa Euler G liên thông yếu G có hai đỉnh u thỏa |deg -(u)- deg+(u)|=1, đỉnh khác G có bậc vào bậc Đỉnh xuất phát đường Euler hai đỉnh u nói với điều kiện deg+(u)>0 (bậc ra>0) b) đỉnh đỉnh có bậc vào bậc chênh lệch 1=> đỉnh xuất phát Bài 9: a) Trình bày thuật toán tìm tất đường chu trình Hamilton đồ thị với đỉnh xuất phát cho trước b) Cho đơn đồ thị vô hướng 10 đỉnh, dạng ma trận kề sau: 10 10 0 0 0 1 1 0 1 1 1 0 0 1 1 1 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 0 0 1 Vẽ lời giải để tìm tất đường chu trình Hamilton đỉnh HD: a) //chu trinh va duong di hamilton #include const max=20;//so dinh toi da int x[max];// luu cac dinh theo thu tu chu trình hamilton int tham[max];//dung de danh dau dinh tham roi int a[max][max];//ma tran ke 10 int n;//so dinh cua thi int count=0;//so chu trinh char *src="d:/hamilton.txt"; void DocFile(){ int i,j ; FILE *f= fopen(src,"r");//mo file thi de doc fscanf(f,"%d",&n);//doc so dinh la n for(i=1;i

Ngày đăng: 11/04/2017, 08:29

TỪ KHÓA LIÊN QUAN

w