Tìm kiếm theo tiêu đề

Tin tức cộng đồng

[MỜI HỢP TÁC] Các kỳ thi Olympic Quốc tế 2026 (IMO - IEO - ISO)

Kính gửi Quý Lãnh đạo, Ban Giám hiệu và Quý Thầy/Cô, FermatTech (Đối tác Google tại VN) phối hợp cùng SCO Ấn Độ trân trọng kính mời tham gia 3 kỳ thi uy tín dành cho HS từ lớp 1 - 12: - IMO: Olympic Toán Quốc tế. - IEO: Olympic Tiếng Anh Quốc tế. - ISO: Olympic Khoa học...
Xem tiếp

Tin tức thư viện

Chức năng Dừng xem quảng cáo trên violet.vn

12087057 Kính chào các thầy, cô! Hiện tại, kinh phí duy trì hệ thống dựa chủ yếu vào việc đặt quảng cáo trên hệ thống. Tuy nhiên, đôi khi có gây một số trở ngại đối với thầy, cô khi truy cập. Vì vậy, để thuận tiện trong việc sử dụng thư viện hệ thống đã cung cấp chức năng...
Xem tiếp

Hỗ trợ kĩ thuật

  • (024) 62 930 536
  • 0919 124 899
  • hotro@violet.vn

Liên hệ quảng cáo

  • (024) 66 745 632
  • 096 181 2005
  • contact@bachkim.vn

DUYỆT ĐỒ THỊ THEO CHIỀU RỘNG

Wait
  • Begin_button
  • Prev_button
  • Play_button
  • Stop_button
  • Next_button
  • End_button
  • 0 / 0
  • Loading_status
Nhấn vào đây để tải về
Báo tài liệu có sai sót
Nhắn tin cho tác giả
(Tài liệu chưa được thẩm định)
Nguồn: Sưu tầm
Người gửi: Nguyễn Việt Vương
Ngày gửi: 13h:40' 06-03-2008
Dung lượng: 117.0 KB
Số lượt tải: 242
Số lượt thích: 0 người
6.4. DUYỆT ĐỒ THỊ THEO CHIỀU RỘNG
Danh sách DS được tổ chức theo kiểu hàng đợi (danh sách vào trước - ra trước – FIFO).

- Việc duyệt có tính chất “lan rộng”.
- Đỉnh được duyệt xong ngay sau khi ta đã xét hết tất cả
các đỉnh kề với nó.
- Đỉnh được xét càng sớm thì sớm trở thành duyệt xong.
VÍ DỤ 6.4
Duyệt đồ thị theo chiều rộng:
7
3
5
6
10
11
12
13
15
1
2
14
8
9
4
6.4. DUYỆT ĐỒ THỊ THEO CHIỀU RỘNG (tiếp)
Thuật toán 6.3 (Breadth-First Search )
1 procedure D_RONG (v) ;
2 begin
3 Q :=  ;
enqueue v into Q ; { Nạp v vào cuối
hàng đợi Q }
5 Duyet [v] := true ;
6 while Q   do
7 begin
dequeue z from Q ; { Loại z ra khỏi
đầu hàng đợi Q}
6.4. DUYỆT ĐỒ THỊ THEO CHIỀU RỘNG (tiếp)
9 Thăm_đỉnh (z) ;
10 for u  DK[z] do
11 if ! Duyet [u] then
12 begin
13 enqueue u into Q ;
14 Duyet [u] := true
15 end
16 end
17 end ;

6.4. DUYỆT ĐỒ THỊ THEO CHIỀU RỘNG (tiếp)
18 BEGIN {Chương trình chính }
19 for v  V do Duyet [v] := false ;
20 for v  V do
21 if ! Duyet [v] then D_RONG (v) ;
22 END .

Độ phức tạp: O(n+m).

VÍ DỤ 6.5
Đồ thị và quá trình duyệt theo chiều rộng:
1
2
5
8
3
6
4
7
9
10
6.5. MỘT SỐ ỨNG DỤNG
CỦA PHÉP DUYỆT ĐỒ THỊ

Bài toán đường đi
Bài toán tìm các mảng liên thông
BÀI TOÁN ĐƯỜNG ĐI
Cho G = (V, E) là một đồ thị vô hướng và hai đỉnh a, b  V.

Bài toán: Tìm đường đi từ đỉnh a đến đỉnh b trên đồ thị G (nếu có).
BÀI TOÁN ĐƯỜNG ĐI (tiếp)
1. Thuật toán Warshall đã trả lời:
có đường đi từ đỉnh a đến đỉnh b  AS[a, b] = true.

2. Dùng phép duyệt đồ thị tìm đường đi (nếu có) từ
đỉnh a đến đỉnh b.
BÀI TOÁN ĐƯỜNG ĐI (tiếp)
Sau lời gọi thủ tục D_SAU(a) hoặc D_RONG(a)
Nếu Duyet[b] = false thì không có đường đi từ
đỉnh a đên đỉnh b.
Nếu Duyet[b] = true thì b thuộc cùng mảng liên
thông với a và có đường đi từ a đến b.

Dùng thêm một biến mảng Truoc để khôi phục đường đi, Truoc [u] ghi đỉnh đến trước đỉnh u trên đường duyệt từ a tới u.

BÀI TOÁN ĐƯỜNG ĐI (tiếp)
Sửa dòng lệnh 6 trong thủ tục D_SAU(a)
6 if ! Duyet [u] then
begin Truoc [u] := v ; D_SAU(u) end ;

Sửa các dòng lệnh 11-15 trong thủ tục D_RONG (v):
11 if ! Duyet [u] then
12 begin
13 enqueue u into Q ;
14 Duyet [u] := true ; Truoc [u] := z
15 end ;
BÀI TOÁN ĐƯỜNG ĐI (tiếp)
Khôi phục đường đi cần tìm: 
b  a1 = Truoc[b]  a2 = Truoc[a1]  . . . .  a

Đường đi tìm được theo thuật toán duyệt theo chiều rộng là đường đi ngắn nhất từ đỉnh a đến đỉnh b.

VÍ DỤ 6.6
Đồ thị và quá trình duyệt theo chiều rộng:













Đường đi từ 1  10: 10  9  6  2  1
BÀI TOÁN TÌM CÁC MẢNG
LIÊN THÔNG
Bài toán: Tìm số mảng liên thông p của đồ thị G và xác định xem mỗi mảng liên thông bao gồm những đỉnh nào.
1
2
4
3
5
6
7
8
9
BÀI TOÁN TÌM CÁC MẢNG
LIÊN THÔNG (tiếp)
Do thủ tục D_SAU(v) hoặc D_RONG(v) duyệt tất
cả các đỉnh thuộc cùng mảng liên thông với đỉnh v nên
số mảng liên thông p của đồ thị G bằng số lần gọi các
thủ tục D_SAU(v) hoặc D_RONG(v).

Dùng thêm biến mảng Mang[v] ghi chỉ số của mảng liên thông chứa v.
BÀI TOÁN TÌM CÁC MẢNG
LIÊN THÔNG (tiếp)
Dùng biến p đếm số mảng liên thông và gán chỉ số cho các mảng liên thông tìm được.

Khởi tạo: p := 0 ;
Thêm lệnh gán: Mang [v] := p ; trong thủ tục Thăm_đỉnh(v).

BÀI TOÁN TÌM CÁC MẢNG
LIÊN THÔNG (tiếp)
Sửa lại chương trình chính của thuật toán duyệt:

1 BEGIN { Chương trình chính }
2 for v  V do Duyet [v] := false ;
3 p := 0 ;
4 for v  V do
5 if ! Duyet [v] then
6 begin p := p + 1 ;
7 D_SAU (v) ; { D_RONG (v) ; }
8 end
9 END .
BÀI TOÁN TÌM CÁC MẢNG
LIÊN THÔNG (tiếp)
Khi kết thúc chương trình:
Biến p cho số mảng liên thông.
Các giá trị Mang[v] , v  V cho phép liệt kê tất cả các đỉnh trong từng mảng liên thông.
VÍ DỤ 6.7
Xét đồ thị:
VÍ DỤ 6.7 (tiếp)
Quá trình duyệt và tìm các mảng liên thông:

 
Gửi ý kiến