DUYỆT đồ THỊ có HƯỚNG và tìm THÀNH PHẦN LIÊN THÔNG MẠNH ( có chương trình chạy)

36 2.9K 8
DUYỆT đồ THỊ có HƯỚNG và tìm THÀNH PHẦN LIÊN THÔNG MẠNH ( có chương trình chạy)

Đ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

BỘ GIÁO DỤC & ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA ĐÀ NẴNG  Đề tài: DUYỆT ĐỒ THỊ CÓ HƯỚNG &TÌM THÀNH PHẦN LIÊN THƠNG MẠNH GVHD: NHĨM HỌC VIÊN: MÔN: PGS.TS TRẦN QUỐC CHIẾN NGUYỄN VĂN ĐỊNH NGUYỄN TUẤN TRUNG HỒ TRÚC LÂM LÊ QUỐC DŨNG ĐOÀN XUÂN LỘC TOÁN ỨNG DỤNG LỚP: CHUYÊN NGÀNH: CAO HỌC K24 KHOA HỌC MÁY TÍNH Đà Nẵng, 03/05/2012 Đồ án mơn Toán ứng dụng CNTT MỤC LỤC *** MỤC LỤC .1 CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI .2 CHƯƠNG 2: ĐẠI CƯƠNG VỀ ĐỒ THỊ .3 I.Một số khái niệm đồ thị .3 II Các khái niệm đường đi, chu trình III.Tính liên thông đồ thị I.Khái niệm đồ thị vô hướng đồ thị có hướng 1.Đồ thị vô hướng: 2.Đồ thị có hướng II.Khái niệm thành phần liên thông mạnh 1.Thành phần liên thông đồ thị vô hướng 2.Thành phần liên thông mạnh đồ thị có hướng .8 III Định lý biểu diễn thành phần liên thông mạnh .8 IV Thuật toán duyệt đồ thị tìm thành phần liên thơng mạnh 1.Thuật tốn duyệt đồ thị có hướng 2.Sơ lược thuật tốn Kosaraju tìm thành phần liên thơng mạnh 3.Thuật tốn Tarjan tìm thành phần liên thông .9 V.Biểu diễn đồ thị .10 1.Biểu diễn đồ thị ma trận kề 10 3.Biểu diễn đồ thị danh sách cạnh (cung) .11 4.Biểu diễn đồ thị danh sách kề: .11 CHƯƠNG 4: THIẾT KẾ CẤU TRÚC DỮ LIỆU VÀ GIẢI THUẬT BÀI TỐN TÌM THÀNH PHẦN LIÊN THƠNG MẠNH 13 I.ĐỊNH NGHĨA 13 1.Đối với đồ thị vô hướng G = (V, E) 13 2.Đối với đồ thị có hướng G = (V, E) 14 II.TÍNH LIÊN THÔNG TRONG ĐỒ THỊ VÔ HƯỚNG 15 III.ĐỒ THỊ ĐẦY ĐỦ VÀ THUẬT TOÁN WARSHALL .16 1.Định nghĩa 16 2.Bao đóng đồ thị 16 3.Thuật toán Warshall 17 IV.CÁC THÀNH PHẦN LIÊN THÔNG MẠNH 18 1.Phân tích 19 2.Cây tìm kiếm DFS thành phần liên thông mạnh .20 3.Thuật toán Tarjan (R.E.Tarjan - 1972) 22 CHƯƠNG 5: MÃ NGUỒN CHƯƠNG TRÌNH VÀ KẾT QUẢ 28 I.Mã nguồn chương trình : 28 II.Kết chương trình với thử : 28 TÀI LIỆU THAM KHẢO 31 GVHD: PGS.TSKH Trần Quốc Chiến trang Đồ án mơn Tốn ứng dụng CNTT CHƯƠNG 1: GIỚI THIỆU ĐỀ TÀI ĐỀ TÀI 2: DUYỆT ĐỒ THỊ CĨ HƯỚNG &TÌM THÀNH PHẦN LIÊN THƠNG MẠNH Trình bày khái niệm thành phần liên thông mạnh, định lý biểu diễn thành phần liên thơng mạnh Trình bày thuật tốn duyệt đồ thị tìm thành phần liên thông mạnh Thiết kế cấu trúc liệu giải thuật Viết chương trình cài đặt thuật tốn ngơn ngữ C THÀNH VIÊN NHĨM VÀ ĐÁNH GIÁ NHẬN XÉT GVHD: PGS.TSKH Trần Quốc Chiến Trang Đồ án mơn Tốn ứng dụng CNTT STT Họ tên Công việc Chữ ký Nhận xét giáo viên Nguyễn Văn Định (Leader) Lê Quốc Dũng tổng hợp viết báo cáo Cài đặt chương trình Viết chương Nghiên cứu giải thuật Cài đặt chương trình Viết chương Nghiên cứu giải thuật Cài đặt chương trình Viết chương Nghiên cứu giải thuật - Đoàn Xuân Lộc Viết chương 4,5 Lập kế hoạch nhóm, - Hồ Trúc Lâm - cài đặt chương trình Viết chương Nghiên cứu giải thuật Kiểm thử chương trình - Nguyễn Tuấn Trung tài liệu CHƯƠNG 2: ĐẠI CƯƠNG VỀ ĐỒ THỊ I Một số khái niệm đồ thị  Đồ thị vô hướng: G = (V,E) gồm tập V đỉnh tập E cạnh Mỗi cạnh e ∈ E liên kết với cặp đỉnh v, w (không kể thứ tự) v w e - Ví dụ:  Đồ thị có hướng: G = (V,E) gồm tập V đỉnh tập E cạnh có hướng gọi cung Mỗi cung e ∈ E liên kết với cặp đỉnh (v, w) có thứ tự v - Ví dụ: GVHD: PGS.TSKH Trần Quốc Chiến e w Trang Đồ án mơn Tốn ứng dụng CNTT  Hai đỉnh x1 x2 (x1≠ x2)của đồ thị gọi hai đỉnh kề chúng đầu cạnh cung  Hai cạnh a,b (hoặc cung a,b) gọi hai cạnh kề (hoặc cung kề nhau) chúng có đỉnh chung  Khuyên cạnh (hoặc cung) có đầu trùng  Đỉnh treo đỉnh thuộc cạnh cung  Đỉnh cô lập đỉnh không thuộc cạnh cung  Số đỉnh đồ thị gọi bậc đồ thị, số cạnh số cung đồ thị gọi cỡ đồ thị  Nếu E gồm cạnh cung G đồ thị hỗn hợp  Đa đồ thị: Đồ thị G=(X,E) vơ hướng (hoặc có hướng) đồ thị đồ thị khơng khun có cặp đỉnh nối với cạnh (hoặc cung nối theo thứ tự cặp đỉnh)  Đơn đồ thị: Đồ thị G=(X,E) vơ hướng (hoặc có hướng) đơn đồ thị độ thị không khuyên cặp đỉnh đươc nối với không cạnh (hoặc cung)  Đồ thị con: Cho đồ thị G=(V, E) Đồ thị G’=(V’, E’) gọi đồ thị G II V ' ⊂ V & E' ⊂ E Các khái niệm đường đi, chu trình  Định nghĩa Cho đồ thị G=(V,E) Dãy µ từ đỉnh v đến đỉnh w dãy đỉnh cạnh nối tiếp đỉnh v kết thúc đỉnh w Số cạnh dãy µ gọi độ dài dãy µ Dãy µ từ đỉnh v đến đỉnh w độ dài n biểu diễn sau µ = (v, e1, v1, e2, v2, , vn-1, en, w) vi (i=1, ,n-1) đỉnh dãy ei (i=1, ,n) cạnh dãy liên thuộc đỉnh kề trước sau Các đỉnh cạnh dãy lặp lại - Đường từ đỉnh v đến đỉnh w dãy từ đỉnh v đến đỉnh w, cạnh khơng lặp lại - Đường sơ cấp đường khơng qua đỉnh q lần - Vịng dãy có đỉnh đầu đỉnh cuối trùng - Chu trình đường có đỉnh đầu đỉnh cuối trùng - Chu trình sơ cấp chu trình khơng qua đỉnh q lần GVHD: PGS.TSKH Trần Quốc Chiến Trang Đồ án môn Tốn ứng dụng CNTT - Dãy có hướng đồ thị có hướng dãy đỉnh cung nối tiếp (e 1, e2, , en) thoả mãn đỉnh cuối cung ei đỉnh đầu cung ei+1 , i=1, n-1 - Đường có hướng đồ thị có hướng dãy có hướng, cung khơng lặp lại - Đường có hướng sơ cấp đường có hướng khơng qua đỉnh q lần - Vịng có hướng dãy có hướng có đỉnh đầu đỉnh cuối trùng - Chu trình có hướng đường có hướng có đỉnh đầu đỉnh cuối trùng - Chu trình có hướng sơ cấp chu trình có hướng khơng qua đỉnh q lần III Tính liên thơng đồ thị  Đối với đồ thị vô hướng G = (V, E) G gọi liên thông tồn đường cặp đỉnh phân biệt đồ thị Nếu G khơng liên thơng chắn hợp hai hay nhiều đồ thị liên thông, đồ thị đơi khơng có đỉnh chung Các đồ thị liên thông rời gọi thành phần liên thông đồ thị xét - Ví dụ: G2 G1 G3 Đồ thị G thành phần liên thông G1, G2, G3  Đối với đồ thị có hướng G = (V, E) Các khái niệm tính liên thơng đồ thị có hướng tuỳ theo có quan tâm tới hướng cung khơng G gọi liên thông mạnh tồn đường (theo cung định hướng) hai đỉnh đồ thị G gọi liên thông yếu đồ thị lót (vơ hướng) liên thông G gọi bán liên thông, với cặp đỉnh (u,v) tồn đường có hướng từ u đến v từ v đến u GVHD: PGS.TSKH Trần Quốc Chiến Trang Đồ án mơn Tốn ứng dụng CNTT Liên thơng mạnh Liên thông yếu  Đồ thị G’=(V’, E’) đồ thị (có hướng) G=(V, E) gọi thành phần liên thơng (mạnh) đồ thị G, đồ thị liên thông (mạnh) tối đại G, tức không tồn đồ thị liên thông (mạnh) G”=(V”, E”) ≠ G’ G thoả V ' ⊂ V " , E ' ⊂ E" Một đồ thị liên thơng có thành phần liên thơng mạnh  Định lý : Cho đồ thị đơn G=(V,E) với n đỉnh, k thành phần liên thơng Khi số cạnh m đồ thị thoả bất đẳng thức n-k≤m≤ (n − k )(n − k + 1) Hệ quả: Mọi đơn đồ thị có n đỉnh số cạnh lớn ( n −1)(n − 2) G liên thông  Định lý biểu diễn thành phần liên thông mạnh Mọi đồ thị có hướng G khơng liên thơng mạnh tạo thành từ tập hợp thành phần liên thông mạnh tập hợp cung nối đỉnh thành phần liên thông mạnh khác Chứng minh: + Xét đỉnh x ∈ G Ký hiệu S tập hợp đồ thị lien thông mạnh chứa x Hiễn nhiên {x} ∈ S S có phần tử cực đại theo quan hệ bao hàm Phần tử cực đại thành phần liên thông mạnh chứa x + Hai thành phần liên thơng mạnh khơng có điểm chung có điểm chung, chúng hợp thành thành phần liên thông mạnh + Những cung không thuộc thành phần liên thông mạnh cả, hiển nhiên liên thuộc đỉnh thành phần liên thông mạnh khác GVHD: PGS.TSKH Trần Quốc Chiến Trang Đồ án mơn Tốn ứng dụng CNTT CHƯƠNG 3: DUYỆT ĐỒ THỊ CĨ HƯỚNG & TÌM THÀNH PHẦN LIÊN THƠNG MẠNH I Khái niệm đồ thị vô hướng đồ thị có hướng Đồ thị vơ hướng: Đồ thị vô hướng G = (V,E) gồm tập V đỉnh tập E cạnh Mỗi cạnh e ∈ E liên kết với cặp đỉnh (v, w) khơng kể thứ tự Đồ thị có hướng Đồ thị có hướng G = (V, E) gồm tập V đỉnh tập E cạnh có hướng gọi cung Mỗi cung e ∈ E liên kết với cặp đỉnh (v, w) có thứ tự GVHD: PGS.TSKH Trần Quốc Chiến Trang Đồ án môn Toán ứng dụng CNTT II Khái niệm thành phần liên thông mạnh Thành phần liên thông đồ thị vô hướng Cho đồ thị G=(V, E) Đồ thị G’=(V’, E’) gọi đồ thị G V ' ⊂ V & E' ⊂ E Đồ thị G’=(V’, E’) đồ thị G=(V, E) gọi thành phần liên thơng đồ thị G, đồ thị liên thông tối đại G, tức không tồn đồ thị liên thông G”=(V”, E”) ≠ G’ G thoả V ' ⊂ V " , E ' ⊂ E" Thành phần liên thơng mạnh đồ thị có hướng Thành phần liên thơng mạnh đồ thị có hướng G đồ thị liên thông mạnh tối đại G Đồ thị có hướng G gọi liên thông mạnh với hai đỉnh phân biệt u v G có đường từ u tới v đường từ v tới u Cho đồ thị có hướng G=(V, E) Đồ thị G’=(V’, E’) gọi đồ thị G V ' ⊂ V & E' ⊂ E Đồ thị G’=(V’, E’) đồ thị có hướng G=(V, E) gọi thành phần liên thông mạnh đồ thị G, đồ thị liên thơng tối đại G, tức không tồn đồ thị liên thông mạnh G”=(V”, E”) ≠ G’ G thoả V ' ⊂ V " , E ' ⊂ E" III Định lý biểu diễn thành phần liên thông mạnh Mọi đồ thị có hướng G khơng liên thơng mạnh tạo thành từ tập hợp thành phần liên thông mạnh tập hợp cung nối đỉnh thành phần liên thông mạnh khác IV Thuật tốn duyệt đồ thị tìm thành phần liên thơng mạnh Thuật tốn duyệt đồ thị có hướng ♦ Đầu vào: Đồ thị G=(V,E), V={1,2,….n} ♦ Đầu ra: Thứ tự trước preord(i) thứ tự sau postord(i) đỉnh i, i=1,2,…,n ♦ Các bước: B1 for (i=1; t[i]=0; i=n); B2 Với i chạy từ đến n GVHD: PGS.TSKH Trần Quốc Chiến Trang Đồ án mơn Tốn ứng dụng CNTT { } Sơ lược thuật tốn Kosaraju tìm thành phần liên thơng mạnh Đồ thị có hướng liên thơng mạnh cặp đỉnh có đường có hướng nối chúng với Đồ thị G’ = (V’, E’) đồ thị có hướng G = (V, E) gọi thành phần liên thông mạnh đồ thị G, đồ thị liên thơng mạnh tối đại G ♦ Đầu vào: Đồ thị có hướng G=(V, E), V={1, 2, …n} ♦ Đầu ra: Số thành phần liên thông K Cây Ti phủ thành phần liên thông thứ i, i=1, …, K ♦ Các bước: (1) Duyệt đồ thị ngược G theo chiều sâu Gán nhãn thứ tự sau postord(v) cho đỉnh v ∈V (2) Thực duyệt đồ thị G theo thứ tự giảm dần thứ tự sau postord(v) for i:=1 to n tplt[i]:=0; K:=0; for postord(u):=n downto if tplt[u] = then begin K:=K+1; end; Thuật tốn Tarjan tìm thành phần liên thơng Thuật tốn trình bày chi tiết phần Thiết kế giải thuật GVHD: PGS.TSKH Trần Quốc Chiến Trang Đồ án mơn Tốn ứng dụng CNTT Trong số đỉnh C, chọn r đỉnh thăm theo thuật toán tìm kiếm theo chiều sâu Ta chứng minh C nằm nhánh DFS gốc r Thật vậy: với đỉnh v C, C liên thông mạnh nên phải tồn đường từ r tới v: (r = x0, x1, , xk = v) Từ định lý 1, tất đỉnh x1, x2, , xk thuộc C nên chúng phải thăm sau đỉnh r Khi thủ tục Visit(r) gọi tất đỉnh x1, x2 , xk=v chưa thăm; thủ tục Visit(r) liệt kê tất đỉnh chưa thăm đến từ r cách xây dựng nhánh gốc r DFS, nên đỉnh x1, x2, , xk = v thuộc nhánh gốc r DFS Bởi chọn v đỉnh C nên ta có điều phải chứng minh Đỉnh r chứng minh định lý - đỉnh thăm trước tất đỉnh khác C - gọi chốt thành phần C Mỗi thành phần liên thơng mạnh có chốt Xét vị trí tìm kiếm DFS, chốt thành phần liên thông đỉnh nằm cao so với đỉnh khác thuộc thành phần đó, hay nói cách khác: tiền bối tất đỉnh thuộc thành phần Định lý 3: Ln tìm đỉnh chốt a thoả mãn: Quá trình tìm kiếm theo chiều sâu a không thăm chốt khác (Tức nhánh DFS gốc a khơng chứa chốt ngồi a) chẳng hạn ta chọn a chốt thăm sau dây chuyền đệ quy chọn a chốt thăm sau tất chốt khác Với chốt a đỉnh thuộc nhánh DFS gốc a thành phần liên thơng mạnh chứa a Chứng minh: Với đỉnh v nằm nhánh DFS gốc a, xét b chốt thành phần liên thông mạnh chứa v Ta chứng minh a ≡b Thật vậy, theo định lý 2, v phải nằm nhánh DFS gốc b Vậy v nằm nhánh DFS gốc a nhánh DFS gốc b Giả sử phản chứng a≠b có hai khả xảy ra: GVHD: PGS.TSKH Trần Quốc Chiến Trang 21 Đồ án mơn Tốn ứng dụng CNTT Khả 1: a →b →v Khả 1: b →a →v • Khả 1: Nhánh DFS gốc a chứa nhánh DFS gốc b, có nghĩa thủ tục Visit(b) thủ tục Visit(a) gọi tới, điều mâu thuẫn với giả thiết a chốt mà trình tìm kiếm theo chiều sâu a không thăm chốt khác • Khả 2: Nhánh DFS gốc a nằm nhánh DFS gốc b, có nghĩa a nằm đường từ b tới v Do b v thuộc thành phần liên thông mạnh nên theo định lý 1, a phải thuộc thành phần liên thơng mạnh Vậy thành phần liên thơng mạnh có hai chốt a b Điều vô lý Theo định lý 2, ta có thành phần liên thơng mạnh chứa a nằm nhánh DFS gốc a, theo chứng minh ta lại có: Mọi đỉnh nhánh DFS gốc a nằm thành phần liên thông mạnh chứa a Kết hợp lại được: Nhánh DFS gốc a thành phần liên thơng mạnh chứa a Thuật tốn Tarjan (R.E.Tarjan - 1972) Chọn u chốt mà từ trình tìm kiếm theo chiều sâu khơng thăm thêm chốt khác, chọn lấy thành phần liên thông mạnh thứ nhánh DFS gốc u Sau loại bỏ nhánh DFS gốc u khỏi DFS, lại tìm thấy đỉnh chốt v khác mà nhánh DFS gốc v không chứa chốt khác, lại chọn lấy thành phần liên thông mạnh thứ hai nhánh DFS gốc v Tương tự cho thành phần liên thông mạnh thứ ba, thứ tư, v.v Có thể hình dung thuật tốn Tarjan "bẻ" DFS vị trí chốt để nhánh rời rạc, nhánh thành phần liên thông mạnh GVHD: PGS.TSKH Trần Quốc Chiến Trang 22 Đồ án môn Tốn ứng dụng CNTT Hình 7: Thuật tốn Tarjan "bẻ" DFS Nhưng điều quan trọng nói tới: Làm kiểm tra đỉnh v có phải chốt hay khơng ? Hãy để ý nhánh DFS gốc đỉnh r Nhận xét 1: Nếu từ đỉnh thuộc nhánh gốc r khơng có cung ngược hay cung chéo khỏi nhánh r chốt Điều dễ hiểu có nghĩa từ r, theo cung đồ thị đến đỉnh thuộc nhánh mà Vậy: Thành phần liên thông mạnh chứa r ⊂Tập đỉnh đến từ r = Nhánh DFS gốc r nên r chốt Nhận xét 2: Nếu từ đỉnh v nhánh DFS gốc r có cung ngược tới đỉnh w tiền bối r, r khơng chốt Thật vậy: có chu trình (w→r→v→w) nên w, r, v thuộc thành phần liên thông mạnh Mà w thăm trước r, điều mâu thuẫn với cách xác định chốt (Xem lại định lý 2) Nhận xét 3: Vấn đề phức tạp gặp phải từ đỉnh v nhánh DFS gốc r, có cung chéo tới nhánh khác Ta thiết lập giải thuật liệt kê thành phần liên thông mạnh thủ tục Visit(u), mà đỉnh u duyệt xong, tức đỉnh khác nhánh DFS gốc u thăm trình thăm đệ quy lùi lại Visit(u) Nếu u chốt, ta thông báo nhánh DFS gốc u thành phần liên thông mạnh chứa u loại đỉnh thuộc thành phần khỏi đồ thị khỏi DFS Có thể chứng minh tính đắn phương pháp này, nhánh DFS gốc u chứa chốt u' khác u' phải duyệt xong trước u GVHD: PGS.TSKH Trần Quốc Chiến Trang 23 Đồ án mơn Tốn ứng dụng CNTT nhánh DFS gốc u' bị loại bỏ Hơn cịn chứng minh rằng, thuật tốn tiến hành từ đỉnh v nhánh DFS gốc r có cung chéo tới nhánh khác r không chốt Để chứng tỏ điều này, ta dựa vào tính chất DFS: cung chéo nối từ nhánh tới nhánh thăm trước đó, khơng có cung chéo tới nhánh thăm sau Giả sử có cung chéo (v, v') từ v∈ nhánh DFS gốc r tới v' ∉ nhánh DFS gốc r, gọi r' chốt thành phần liên thơng chứa v' Theo tính chất trên, v' phải thăm trước r, suy r' phải thăm trước r Có hai khả xảy ra: • Nếu r' thuộc nhánh DFS duyệt trước r r' duyệt xong trước thăm r, tức thăm r sau thăm v nhánh DFS gốc r' • bị huỷ, cung chéo (v, v') khơng tính đến Nếu r' tiền bối r ta có r' đến r, v nằm nhánh DFS gốc r nên r đến v, v đến v' (v, v') cung, v' lại đến r' r' chốt thành phần liên thông mạnh chứa v' Ta thiết lập chu trình (r'→r→v→v'→r'), suy r' r thuộc thành phần liên thông mạnh, r' chốt nên r chốt Từ ba nhận xét cách cài đặt chương trình nhận xét 3, Ta có: Đỉnh r chốt không tồn cung ngược cung chéo nối đỉnh thuộc nhánh DFS gốc r với đỉnh ngồi nhánh đó, hay nói cách khác: r chốt không tồn cung nối từ đỉnh thuộc nhánh DFS gốc r tới đỉnh thăm trước r Dưới cài đặt thông minh, cần sửa đổi chút thủ tục Visit ta có phương pháp Nội dung đánh số thứ tự đỉnh từ đỉnh thăm đến đỉnh thăm sau Định nghĩa Numbering[u] số thứ tự đỉnh u theo cách đánh số Ta tính thêm Low[u] giá trị Numbering nhỏ đỉnh đến từ đỉnh v nhánh DFS gốc u cung (với giả thiết u có cung giả nối với u) Cụ thể cách cực tiểu hoá Low[u] sau: Trong thủ tục Visit(u), trước hết ta đánh số thứ tự thăm cho đỉnh u khởi gán Low[u] := Numbering[u] (u có cung tới u) Xét tất đỉnh v nối từ u: • Nếu v thăm ta cực tiểu hố Low[u] theo cơng thức: GVHD: PGS.TSKH Trần Quốc Chiến Trang 24 Đồ án mơn Tốn ứng dụng CNTT Low[u]mới := min(Low[u]cũ, Numbering[v]) • Nếu v chưa thăm ta gọi đệ quy thăm v, sau cực tiểu hố Low[u] theo cơng thức: Low[u]mới := min(Low[u]cũ, Low[v]) Dễ dàng chứng minh tính đắn cơng thức tính Khi duyệt xong đỉnh u (chuẩn bị thoát khỏi thủ tục Visit(u) Ta so sánh Low[u] Numbering[u] Nếu Low[u] = Numbering[u] u chốt, khơng có cung nối từ đỉnh thuộc nhánh DFS gốc u tới đỉnh thăm trước u Khi việc liệt kê đỉnh thuộc thành phần liên thông mạnh chứa u nhánh DFS gốc u Để công việc dễ dàng nữa, ta định nghĩa danh sách L tổ chức dạng ngăn xếp dùng ngăn xếp để lấy đỉnh thuộc nhánh Khi thăm tới đỉnh u, ta đẩy đỉnh u vào ngăn xếp, duyệt xong đỉnh u, đỉnh thuộc nhánh DFS gốc u đẩy vào ngăn xếp L sau u Nếu u chốt, ta việc lấy đỉnh khỏi ngăn xếp L lấy tới đỉnh u nhánh DFS gốc u thành phần liên thơng mạnh chứa u procedure Visit(u∈V); begin Count := Count + 1; Numbering[u] := Count; {Trước hết đánh số u} Low[u] := Numbering[u]; ; ; for (∀v: (u, v)∈E) if then Low[u] := min(Low[u], Numbering[v]) else begin Visit(v); Low[u] := min(Low[u], Low[v]); end; if Numbering[u] = Low[u] then {Nếu u chốt} begin ; repeat ; ; ; until v = u; GVHD: PGS.TSKH Trần Quốc Chiến Trang 25 Đồ án mơn Tốn ứng dụng CNTT end; end; begin ; ; ; ; Visit(x) end Bởi thuật toán Tarjan sửa đổi chút thuật toán DFS, thao tác vào/ra ngăn xếp thực không n lần Vậy nên đồ thị có n đỉnh m cung độ phức tạp tính tốn thuật tốn Tarjan O(n + m) trường hợp biểu diễn đồ thị danh sách kề, O(n2) trường hợp biểu diễn ma trận kề O(n.m) trường hợp biểu diễn danh sách cạnh Trong chương trình này, ta sử dụng: • Ma trận kề A để biểu diễn đồ thị • Mảng Free kiểu Boolean, Free[u] = True u chưa bị liệt kê vào thành phần liên thông nào, tức u chưa bị loại khỏi đồ thị • Mảng Numbering Low với cơng dụng trên, quy ước Numbering[u] = đỉnh u chưa thăm • Mảng Stack, thủ tục Push, hàm Pop để mô tả cấu trúc ngăn xếp Input: file văn GRAPH.INP: • Dịng đầu: Ghi số đỉnh n (≤100) số cung m đồ thị cách dấu cách; • m dịng tiếp theo, dịng ghi hai số nguyên u, v cách dấu cách thể có cung (u, v) đồ thị Output: file văn TPLT.OUT: Liệt kê thành phần liên thơng mạnh (Chương trình cài đặt chạy thành công với thử đề cho, nội mã nguồn chương trình thư mục chương trình kèm theo CD báo cáo) GVHD: PGS.TSKH Trần Quốc Chiến Trang 26 Đồ án mơn Tốn ứng dụng CNTT 11 1 4 9 10 10 11 GRAPH.INP 15 10 11 GVHD: PGS.TSKH Trần Quốc Chiến TPLT.OUT 765 432 11 10 Trang 27 Đồ án mơn Tốn ứng dụng CNTT CHƯƠNG 5: MÃ NGUỒN CHƯƠNG TRÌNH VÀ KẾT QUẢ I II Mã nguồn chương trình : Tham chiếu thư mục chương trình chứa mã nguồn cài đặt Kết chương trình với thử : Kết chương trình với thử Graph1.INP Kết chương trình với thử Graph2.INP GVHD: PGS.TSKH Trần Quốc Chiến Trang 28 Đồ án mơn Tốn ứng dụng CNTT Kết chương trình với thử Graph3.INP Kết chương trình với thử Graph4.INP GVHD: PGS.TSKH Trần Quốc Chiến Trang 29 Đồ án mơn Tốn ứng dụng CNTT Kết chương trình với thử Graph5.INP Kết chương trình với thử Graph6.INP GVHD: PGS.TSKH Trần Quốc Chiến Trang 30 Đồ án mơn Tốn ứng dụng CNTT TÀI LIỆU THAM KHẢO [1] Trần Quốc Chiến, “Lý thuyết đồ thị ứng dụng”, Đại học Đà Nẵng, 2007 [2] Trần Quốc Chiến, “Toán rời rạc”, Đại học Đà Nẵng, 2007 [3]Nguyễn Cam, Chu Đức Khánh, “Lý thuyết đồ thị”, NXB TP.HCM 1999 [4]Trần Quốc Chiến, “Một số giải thuật tìm đường ngắn hai tập đỉnh”, Kỷ yếu Hội thảo quốc gia: Một số vấn đề chọn lọc CNTT, Đà Nẵng 18-20 tháng năm 2004, trang 53-59 NXB Khoa học Kỹ thuật, Hà Nội 2005 [5]Trần Quốc Chiến, “Giải thuật tìm đường ngắn hai tập đỉnh”, Tạp chí Khoa học & Công nghệ, Đại học Đà Nẵng 3(7)/2004 [6]Trần Quốc Chiến, “Đường kính hai tập dỉnh đồ thị- Khái niệm, Giải thuật Chương trình”, Hội nghị khoa học lần thứ 3- Đại học Đà Nẵng 11/2004 [7]Trần Quốc Chiến, Báo cáo “Thuật tốn hai chiều tìm luồng cực đại”, Hội thảo quốc gia CNTT & Truyền thông lần thứ Hải Phịng, 8/2005 [8]Trần Quốc Chiến, “Thuật tốn chuyển nguồn đích tìm luồng cực đại(1) ”, Tạp chí Khoa học Công nghệ, Đại học Đà Nẵng, 1(13)/2006, 53-58 [9]Trần Quốc Chiến, “Thuật tốn hốn chuyển nguồn đích tìm luồng cực đại (2) ”, Tạp chí Khoa học & Công nghệ, Đại học Đà Nẵng, 3(15)-4(16)/2006, 77-82 GVHD: PGS.TSKH Trần Quốc Chiến Trang 31 ... niệm thành phần liên thông mạnh Thành phần liên thông đồ thị vô hướng Cho đồ thị G=(V, E) Đồ thị G’=(V’, E’) gọi đồ thị G V '' ⊂ V & E'' ⊂ E Đồ thị G’=(V’, E’) đồ thị G=(V, E) gọi thành phần liên thông. .. thông yếu  Đồ thị G’=(V’, E’) đồ thị (có hướng) G=(V, E) gọi thành phần liên thông (mạnh) đồ thị G, đồ thị liên thơng (mạnh) tối đại G, tức không tồn đồ thị liên thông (mạnh) G”=(V”, E”) ≠ G’... E’) gọi đồ thị G V '' ⊂ V & E'' ⊂ E Đồ thị G’=(V’, E’) đồ thị có hướng G=(V, E) gọi thành phần liên thông mạnh đồ thị G, đồ thị liên thông tối đại G, tức không tồn đồ thị liên thông mạnh G”=(V”, E”)

Ngày đăng: 30/12/2013, 16:10

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan