• Đồ thị và biểu diễn đồ thị • Duyệt đồ thị. • Sắp xếp topo[r]
Trang 1Đồ thị
(Graphs)
Nguyễn Mạnh Hiển
hiennm@tlu.edu.vn
Trang 2Nội dung
• Đồ thị và biểu diễn đồ thị
• Duyệt đồ thị
• Sắp xếp topo
• Tìm đường đi ngắn nhất
Trang 3Đồ thị và biểu diễn đồ thị
Trang 4Đồ thị
• Đồ thị G = (V, E) bao gồm một
tập đỉnh V và một tập cạnh E
• Mỗi cạnh là một cặp (v, w)
trong đó v, w V
• Đồ thị không có hướng:
− Các cạnh không có thứ tự
− Cạnh (v, w) giống như cạnh (w, v)
• Đồ thị không có hướng được vẽ bằng
các nút cho các đỉnh và các đoạn thẳng
cho các cạnh
v5
v7
v8
v3
v6
v4
Trang 5Đồ thị có hướng
• Trong đồ thị có hướng, E là
một tập các cặp có thứ tự,
nhưng không nhất thiết là
tập đối xứng, tức là nếu cạnh
(v, w) có mặt thì cạnh (w, v)
có thể vắng mặt
• Đồ thị có hướng được vẽ bằng
các nút cho các đỉnh và các mũi
tên cho các cạnh
v5
v7
v8
v3
v6
v4
Trang 6Đường đi và trọng số
• Đường đi là một dãy đỉnh w1, w2, …,
wn, trong đó có một cạnh giữa hai
đỉnh liên tiếp wi và wi+1
• Chiều dài của đường đi có n đỉnh
bằng n – 1 (số cạnh)
• Đường đi là đơn giản nếu tất cả các
đỉnh trên đường đi khác nhau (ngoại
trừ đỉnh đầu và đỉnh cuối có thể trùng
nhau)
• Các cạnh có thể có trọng số (hay chi
phí) kèm theo
• Chi phí của đường đi bằng tổng trọng
số của các cạnh trên đường đi đó
v5
v7
v8
v3
v6
v4 3
1 -1
4
Trang 7Chu trình
• Chu trình là đường đi w1, w2, …, wn = w1, trong đó đỉnh đầu và đỉnh cuối trùng nhau
− Chu trình đơn giản nếu đường đi đó đơn giản
• Trong hình vẽ bên trên: v2, v8, v6, v3, v5, v2 là một chu trình (đơn
giản) trong đồ thị không có hướng, nhưng không phải như vậy trong
đồ thị có hướng
v5
v7
v8
v3
v6
v4
v5
v7
v8
v3
v6
v4
Trang 8Đồ thị liên thông
• Đồ thị không có hướng là liên
thông nếu tồn tại đường đi giữa
mọi cặp đỉnh trong đồ thị đó
• Đồ thị có hướng thỏa mãn điều
kiện trên được gọi là liên thông
mạnh
• Nếu một đồ thị có hướng không
liên thông mạnh, nhưng đồ thị
không có hướng tương ứng liên
thông, thì được gọi là liên thông
yếu
v5
v7
v8
v3
v6
v4
liên thông yếu
v5
v7
v8
v3
v6
v4
liên thông mạnh
Trang 9Biểu diễn đồ thị
• Đánh số các đỉnh trong đồ thị từ 0 đến n-1
• Có thể dùng mảng hai chiều A có kích thước n x n (ma trận
vuông cỡ n) để lưu trữ đồ thị có hướng
− Với đồ thị không có trọng số, A[v][w] bằng true hoặc false tùy theo cạnh (v, w) có mặt trong đồ thị hay không
− Với đồ thị có trọng số, A[v][w] bằng trọng số của cạnh (v, w) nếu cạnh đó có mặt, hoặc bằng một giá trị đặc biệt (như
) nếu cạnh đó vắng mặt
• Với đồ thị không có hướng, cách biểu diễn trên (được gọi là
biểu diễn ma trận kề) lưu trữ mỗi cạnh hai lần
• Biểu diễn ma trận kề yêu cầu không gian O(n2)
Trang 10Ví dụ biểu diễn ma trận kề
v5
v7
v0
v3
v6
v4
0 1 2 3 4 5 6 7
4 F F F F F F F F
6 F F F F F F F F