Duy ệ t theo chi ề u sâuThuật toán: - Chọn 1 đỉnh làm điểm bắt đầu - Bắt đầu duyệt từ đầu cho đến tận cùng của nhánh - Sau đó sẽ quay lại đoạn đường đã duyệt, và duyệt tiếp những đỉnh kề
Trang 1Duy ệ t theo chi ề u sâu
Thuật toán:
- Chọn 1 đỉnh làm điểm bắt đầu
- Bắt đầu duyệt từ đầu cho đến tận cùng của nhánh
- Sau đó sẽ quay lại đoạn đường đã duyệt, và duyệt tiếp những đỉnh kề chưa được duyệt
- Quá trình sẽ kết thúc khi quay lại đỉnh bắt đầu và tất cả các đỉnh đã được duyệt
- Trong quá trình duyệt, nếu 1 đỉnh sẽ rẽ qua nhiều hơn 1 đỉnh, thì ta chọn đỉnh có số hoặc chữ cái nhỏ hơn
Trang 2Duy ệ t theo chi ề u sâu
Bài tập: Duyệt đồ thị sau, bắt đầu từ đỉnh 2
Trang 3Duy ệ t theo chi ề u sâu
Giải thuật: Sử dụng đệ qui
void DFS (bool mark[][max], int trace[], int nodes, int u) { for (int v=0;v<nodes;v++)
{ if ((mark1[u][v] ==true) && (trace[v] ==0)
{ trace[v]=u;
DFS(mark,trace,nodes,v);
} }
}
Trang 4Duy ệ t theo chi ề u sâu
Nhận xét:
- Duyệt theo chiều sau của độ thì biểu diễn bằng
danh sách kề có độ phức tạp O(n+m) // n- Số đỉnh, m- Số cạnh
- Duyệt theo chiều sâu của đồ thị biểu diễn bằng ma trận kề có độ phức tạp O(n2)
- Duyệt theo chiều sâu thì đỉnh duyệt càng sớm thì càng kết thúc muộn
- Dùng một ngăn xếp lưu trữ các đỉnh đang duyệt để cải tiến thuật toán
Trang 5Duy ệ t theo chi ề u r ộ ng
Duyệt theo chiều rộng: Duyệt có tính chất “lan
rộng” Xét 1 đỉnh bắt đầu, và duyệt tất cả các đỉnh kề
với nó
Ví dụ:
A
B
D
H
C
E
G F
1
5
8 7
3
Thứ tự duyệt: A, B, C, D, E, H, F, G
Trang 6Duy ệ t theo chi ề u r ộ ng
Thuật toán:
- Chọn 1 đỉnh trong đồ thị để bắt đầu
- Từ đỉnh đầu tiên, đi hết tất cả các đỉnh liên thông với nó
- Tiếp tục xét với đỉnh thứ 2…
- Quá trình kết thúc khi duyệt xong tất cả các đỉnh
Trang 7Duy ệ t theo chi ề u r ộ ng
Bài tập: Duyệt đồ thị sau đây theo chiều rộng bắt
đầu từ đỉnh 4
Trang 8Duy ệ t theo chi ề u r ộ ng
Giải thuật:
void BFS (queue Q, int trace[], bool mark[][max], int start, int nodes)
Q.push(start);
trace[start]=-1;
Q.pop();
for ( int v=0;v<nodes;v++)
trace[v]=u;
} }
}while (!Q.empty());
}
Trang 9Duy ệ t theo chi ề u r ộ ng
Nhận xét:
- Duyệt theo chiều sâu và duyệt theo chiều rộng chỉ khác nha ở chỗ giải thuật DFS sử dụng Stack, và giải thuật BFS sử dụng Queue Do đó độ phức tạp của DFS và BFS là như nhau
- Duyệt theo chiều rộng thì đỉnh được xét càng sớm thì sẽ sớm duyệt xong
Trang 10CÂY BAO TRÙM T Ố I THI Ể U
Minimum spanning tree