Lý thuyết đồ thị: bài tập có lời giải từng bước

Bài tập Lý thuyết đồ thị miễn phí có hình vẽ, gợi ý và lời giải đầy đủ. Số liệu mới mỗi lần, ở ba mức độ: bậc và cạnh, đường đi Euler và cây, đường đi ngắn nhất và cây khung.

Bài tập miễn phíDễ

Một cây có 12 đỉnh. Nó có bao nhiêu cạnh |E|?

|V| = 12

Đáp án chính xác: một số nguyên, không làm tròn.

Bài tiếp theo →

Bạn luyện tập những gì

  1. Dễbậc và cạnh
  2. Trung bìnhđường đi Euler và cây
  3. Khóđường đi ngắn nhất và cây khung

Cách giải bài tập Lý thuyết đồ thị

  1. Hãy ghi bậc của mỗi đỉnh; tổng các bậc bằng hai lần số cạnh.
  2. Với bài Euler, hãy kiểm tra đồ thị liên thông và đếm số đỉnh có bậc lẻ.
  3. Với cây, hãy dùng n − 1 cạnh và bổ đề bắt tay.
  4. Với Dijkstra, hãy lập bảng khoảng cách tạm thời và mỗi vòng chốt đỉnh chưa chốt có giá trị nhỏ nhất.
  5. Với cây khung nhỏ nhất, hãy sắp xếp các cạnh theo trọng số và bỏ qua mọi cạnh tạo thành chu trình (Kruskal), hoặc mở rộng một cây từ một đỉnh xuất phát (Prim).

Lỗi thường gặp

  • Quên chia tổng bậc cho 2.
  • Gọi một đồ thị là đồ thị Euler mà không kiểm tra tính liên thông.
  • Chốt một đỉnh trong Dijkstra trước khi khoảng cách của nó là nhỏ nhất.
  • Chọn các cạnh nhẹ nhất mà không kiểm tra chu trình.
  • Đếm số chu trình Hamilton của Kn là n! thay vì (n − 1)!/2.

Công thức chính

Bổ đề bắt tay
Σ deg(v) = 2|E|
Đồ thị đầy đủ
|E(Kn)| = n(n − 1)/2, |E(Km,n)| = m·n
Đồ thị đều
|E| = n·k/2
Cây và rừng
|E| = n − 1, |E| = n − c
Lá của cây
L = 2 + Σ (deg(v) − 2) over deg(v) ≥ 3
Euler
chu trình: mọi bậc đều chẵn; đường đi: đúng 2 bậc lẻ
Chu trình Hamilton trong Kn
(n − 1)!/2
Cập nhật Dijkstra
d(v) = min(d(v), d(u) + w(u, v))
Đường đi độ dài L
(Mᴸ)ij

Học Lý thuyết đồ thị từ đầu

Trước bài này: Tập hợp, quan hệ & hàm

1Đỉnh, cạnh và bậc

Một đồ thị gồm các đỉnh (điểm) và các cạnh (đường nối giữa hai đỉnh). Trong đồ thị đơn không có khuyên và không có cạnh kép.

Bậc của một đỉnh là số cạnh gặp đỉnh đó. Mỗi cạnh có hai đầu, nên nó cộng 1 vào bậc của mỗi đầu. Điều đó cho ta bổ đề bắt tay:

Σ deg(v) = 2·|E|

Hai hệ quả: tổng các bậc luôn chẵn, và số đỉnh có bậc lẻ cũng chẵn.

  • Đồ thị đầy đủ Kn nối mọi cặp đỉnh: n(n − 1)/2 cạnh.
  • Đồ thị hai phần đầy đủ Km,n nối mọi đỉnh ở một phía với mọi đỉnh ở phía kia: m·n cạnh.
  • Một đồ thị k-đều trên n đỉnh có n·k/2 cạnh.

Ma trận kề có số 1 tại (i, j) khi i và j được nối. Với đồ thị vô hướng nó đối xứng, tổng một hàng là một bậc, và phần tử (i, j) của Mᴸ đếm số đường đi độ dài L từ i đến j.

Tự kiểm tra Một đồ thị có các bậc 3, 3, 2, 2, 2. Nó có bao nhiêu cạnh?
  1. 10
  2. 12
  3. 5
  4. 6

Đáp số: 6. Các bậc cộng lại bằng 12, và mỗi cạnh được đếm hai lần, nên có 12/2 = 6 cạnh. 5 là số đỉnh.

2Euler và Hamilton

Một chu trình Euler đi qua mọi cạnh đúng một lần và trở về điểm xuất phát. Một đường đi Euler đi qua mọi cạnh một lần nhưng có thể kết thúc ở nơi khác. Với một đồ thị liên thông:

  • mọi bậc đều chẵn: tồn tại chu trình Euler;
  • đúng hai bậc lẻ: tồn tại đường đi Euler, từ một đỉnh lẻ đến đỉnh lẻ kia;
  • nhiều hơn hai bậc lẻ: không có cái nào.

Một chu trình Hamilton thăm mọi đỉnh đúng một lần. Không có phép thử bậc đơn giản cho nó. Trong Kn có (n − 1)!/2 chu trình Hamilton khác nhau: cố định điểm xuất phát, sắp xếp n − 1 đỉnh còn lại, và chia cho 2 vì hai chiều đi.

Tự kiểm tra Một đồ thị liên thông có các bậc 2, 3, 4, 3, 2. Nó có gì?
  1. Cả chu trình Euler lẫn một đường đi Euler không phải chu trình
  2. Không có cái nào
  3. Một chu trình Euler
  4. Một đường đi Euler, nhưng không có chu trình Euler

Đáp số: Một đường đi Euler, nhưng không có chu trình Euler. Có đúng hai đỉnh bậc lẻ (hai đỉnh bậc 3), nên có một đường đi Euler giữa chúng, nhưng không có chu trình.

3Cây

Một cây là đồ thị liên thông không có chu trình. Mọi cây có n đỉnh có đúng n − 1 cạnh. Thêm bất kỳ cạnh nào sẽ tạo ra một chu trình; bỏ bất kỳ cạnh nào sẽ làm nó mất liên thông.

Một rừng gồm c cây trên n đỉnh có n − c cạnh. Một đồ thị liên thông có m cạnh sẽ còn lại một cây khung sau khi bỏ m − n + 1 cạnh.

Bổ đề bắt tay đếm được số lá: Σ deg = 2(n − 1). Dạng ngắn gọn là L = 2 + Σ (d − 2) trên các đỉnh có bậc d ≥ 3. Một cây có hai đỉnh bậc 3 còn lại là lá có 2 + 1 + 1 = 4 lá.

4Dijkstra và cây khung nhỏ nhất

Thuật toán Dijkstra tìm khoảng cách ngắn nhất từ một đỉnh xuất phát trong đồ thị có trọng số không âm.

  1. Gán khoảng cách 0 cho đỉnh xuất phát và ∞ cho mọi đỉnh khác.
  2. Chốt đỉnh chưa chốt có khoảng cách nhỏ nhất; khoảng cách của nó giờ là cuối cùng.
  3. Với mỗi đỉnh kề v, cập nhật d(v) = min(d(v), d(u) + w(u, v)).
  4. Lặp lại cho đến khi đỉnh đích được chốt.

Một cây khung nhỏ nhất nối tất cả các đỉnh với tổng trọng số nhỏ nhất. Kruskal sắp xếp các cạnh từ nhẹ đến nặng và lấy từng cạnh trừ khi nó tạo thành chu trình. Prim mở rộng một cây từ một đỉnh xuất phát, luôn thêm cạnh nhẹ nhất đi ra khỏi cây. Cả hai dừng sau n − 1 cạnh.

Ví dụ có lời giải

Tìm khoảng cách ngắn nhất từ A đến E trong đồ thị dưới đây.

1

Bắt đầu

412581ABCDE

d(A) = 0. Các đỉnh kề của nó có d(B) = 4 và d(C) = 1.

2

Chốt C (1)

Qua C: d(B) = min(4, 1 + 2) = 3 và d(E) = 1 + 8 = 9.

3

Chốt B (3)

Qua B: d(D) = 3 + 5 = 8.

4

Chốt D (8)

Qua D: d(E) = min(9, 8 + 1) = 9. Không cải thiện, hai đường bằng nhau.

5

Chốt E (9)

E đã được chốt: khoảng cách của nó là cuối cùng.

Đáp số

Khoảng cách ngắn nhất là d(E) = 9, theo đường A → C → E. Đường A → C → B → D → E có cùng độ dài, 1 + 2 + 5 + 1 = 9.

Tự kiểm tra Thuật toán Kruskal đã lấy các cạnh có trọng số 1, 2 và 3. Cạnh nhẹ nhất tiếp theo, trọng số 4, nối hai đỉnh đã liên thông với nhau. Điều gì xảy ra?
  1. Cạnh trọng số 3 bị loại bỏ thay thế
  2. Nó bị bỏ qua vì sẽ tạo thành chu trình
  3. Nó được lấy vì là cạnh nhẹ nhất còn lại
  4. Thuật toán dừng lại

Đáp số: Nó bị bỏ qua vì sẽ tạo thành chu trình. Kruskal không bao giờ tạo chu trình: một cạnh giữa hai đỉnh của cùng một thành phần liên thông sẽ bị bỏ qua, và thuật toán chuyển sang cạnh kế tiếp.

5Lỗi thường gặp

  • Quên chia tổng bậc cho 2 để có số cạnh.
  • Kiểm tra chu trình Euler mà không kiểm tra đồ thị có liên thông hay không.
  • Chốt một đỉnh trong Dijkstra trước khi nó có khoảng cách tạm thời nhỏ nhất.
  • Lấy n − 1 cạnh nhẹ nhất mà không kiểm tra chu trình.
  • Đếm chu trình Hamilton của Kn là n! thay vì (n − 1)!/2.

6Các câu hỏi thi trông như thế nào

  • Dễ: bậc và cạnh. Bạn dùng bổ đề bắt tay, đếm số cạnh của Kn, Km,n, đồ thị đều và cây, đọc một ma trận kề, hoặc nhấp vào đỉnh có bậc cho trước.
  • Trung bình: đường đi Euler và cây. Bạn xác định đồ thị có chu trình hay đường đi Euler hay không, đếm lá của một cây, đếm số cạnh cần bỏ để được cây khung, hoặc đếm chu trình Hamilton trong Kn.
  • Khó: đường đi ngắn nhất và cây khung. Bạn chạy thuật toán Dijkstra, tìm đỉnh được chốt ở một vòng cho trước, tìm trọng số của cây khung nhỏ nhất, nhấp vào cạnh mà Kruskal hoặc Prim thêm tiếp theo, hoặc đếm số đường đi bằng ma trận kề.

Học từng bước một trong ứng dụngHọc từng bước một trong ứng dụng

Ví dụ có lời giải

Ví dụ 1Dễ
AABBCCDDEE0010000001100010000101110

Ma trận kề của một đồ thị đơn vô hướng được hiển thị. Đồ thị có bao nhiêu cạnh |E|?

Tìm |E|

Hiện các gợi ý
  1. Phần tử (i, j) bằng 1 khi các đỉnh i và j được nối bằng một cạnh.
  2. Mỗi cạnh {i, j} cho hai số 1: một ở (i, j) và một ở (j, i).
  3. Ma trận chứa 8 số một.
Hiện đáp án và lời giải từng bước

Bậc: bậc của một đỉnh là số cạnh gặp đỉnh đó. Mỗi cạnh có hai đầu, nên tổng các bậc bằng hai lần số cạnh: Σ deg(v) = 2|E| (bổ đề bắt tay). Do đó số đỉnh có bậc lẻ là số chẵn. Kn có n(n − 1)/2 cạnh, một đồ thị k-đều trên n đỉnh có nk/2 cạnh, và một cây trên n đỉnh có n − 1 cạnh.

Đếm các bit một

tổng các hàng: 1 + 1 + 2 + 1 + 3 = 8
|E| = 8/2 = 4

Đáp số

|E| = 4
Ví dụ 2Trung bình
ABCDEFGChu trình EulerĐường đi Euler, không có chu trìnhkhông phải cả hai

Đồ thị liên thông có chu trình Euler, đường đi Euler không phải chu trình, hay không có cái nào? Hãy nhấp vào đáp án của bạn.

|V| = 7|E| = 10
  1. 1Chu trình Euler
  2. 2Đường đi Euler, không có chu trình
  3. 3không phải cả hai
Hiện các gợi ý
  1. Định lý Euler chỉ cần bậc của các đỉnh (đồ thị liên thông).
  2. Mọi bậc chẵn: chu trình Euler. Đúng hai bậc lẻ: đường đi Euler giữa chúng. Nhiều hơn: không có cái nào.
  3. Hãy đếm các đỉnh có bậc lẻ.
Hiện đáp án và phần giải thích

Euler, Hamilton và cây: một đồ thị liên thông có chu trình Euler (đi qua mỗi cạnh một lần, trở về điểm đầu) khi mọi đỉnh có bậc chẵn, và có đường đi Euler không phải chu trình khi có đúng hai đỉnh bậc lẻ; khi đó đường đi chạy từ một đỉnh lẻ đến đỉnh lẻ kia. Một chu trình Hamilton thăm mỗi đỉnh một lần; Kn có (n − 1)!/2 chu trình như vậy. Một cây trên n đỉnh có n − 1 cạnh, và một đồ thị liên thông có m cạnh còn lại một cây khung sau khi bỏ m − n + 1 cạnh.

Các bậc

deg(A) = 1, deg(B) = 4, deg(C) = 2, deg(D) = 4, deg(E) = 4, deg(F) = 2, deg(G) = 3

Các đỉnh lẻ

A, G → 2
Đường đi Euler, không có chu trình

Đáp số

Đường đi Euler, không có chu trình

Đường đi Euler bắt đầu ở một đỉnh lẻ và kết thúc ở đỉnh lẻ kia.

Ví dụ 3Khó
ABCDEF

Có bao nhiêu đường đi khép kín độ dài 3 bắt đầu và kết thúc tại E? Một đường đi có thể lặp lại đỉnh và cạnh. Gọi số đó là N.

M = ma trận kềL = 3

Tìm N

Hiện các gợi ý
  1. Với ma trận kề M, số đường đi độ dài L từ i đến j là phần tử (i, j) của Mᴸ.
  2. Hãy đếm các đường đi độ dài 2 từ E đến mọi đỉnh trước, rồi đi thêm một bước.
  3. Các đường đi độ dài 2 từ E: A: 2, B: 1, C: 0, D: 2, E: 4, F: 1.
Hiện đáp án và lời giải từng bước

Bậc: bậc của một đỉnh là số cạnh gặp đỉnh đó. Mỗi cạnh có hai đầu, nên tổng các bậc bằng hai lần số cạnh: Σ deg(v) = 2|E| (bổ đề bắt tay). Do đó số đỉnh có bậc lẻ là số chẵn. Kn có n(n − 1)/2 cạnh, một đồ thị k-đều trên n đỉnh có nk/2 cạnh, và một cây trên n đỉnh có n − 1 cạnh.

Ma trận kề

A: 0 1 1 0 0 0
B: 1 0 0 1 1 0
C: 1 0 0 0 1 0
D: 0 1 0 0 1 1
E: 0 1 1 1 0 1
F: 0 0 0 1 1 0

Thêm một bước

(M³)EE = 2·0 + 1·1 + 0·1 + 2·1 + 4·0 + 1·1 = 4

Đáp số

N = 4

Câu hỏi thường gặp

Lý thuyết đồ thị là gì?

Một đồ thị gồm các đỉnh (điểm) và các cạnh (đường nối giữa hai đỉnh). Trong đồ thị đơn không có khuyên và không có cạnh kép.

Hai hệ quả: tổng các bậc luôn chẵn, và số đỉnh có bậc lẻ cũng chẵn.

Làm thế nào để giải bài tập Lý thuyết đồ thị từng bước?
  1. Hãy ghi bậc của mỗi đỉnh; tổng các bậc bằng hai lần số cạnh.
  2. Với bài Euler, hãy kiểm tra đồ thị liên thông và đếm số đỉnh có bậc lẻ.
  3. Với cây, hãy dùng n − 1 cạnh và bổ đề bắt tay.
  4. Với Dijkstra, hãy lập bảng khoảng cách tạm thời và mỗi vòng chốt đỉnh chưa chốt có giá trị nhỏ nhất.
  5. Với cây khung nhỏ nhất, hãy sắp xếp các cạnh theo trọng số và bỏ qua mọi cạnh tạo thành chu trình (Kruskal), hoặc mở rộng một cây từ một đỉnh xuất phát (Prim).
Những lỗi thường gặp trong Lý thuyết đồ thị là gì?
  • Quên chia tổng bậc cho 2.
  • Gọi một đồ thị là đồ thị Euler mà không kiểm tra tính liên thông.
  • Chốt một đỉnh trong Dijkstra trước khi khoảng cách của nó là nhỏ nhất.
  • Chọn các cạnh nhẹ nhất mà không kiểm tra chu trình.
  • Đếm số chu trình Hamilton của Kn là n! thay vì (n − 1)!/2.
Các bài tập Lý thuyết đồ thị bao gồm những gì?
  • Dễ: bậc và cạnh
  • Trung bình: đường đi Euler và cây
  • Khó: đường đi ngắn nhất và cây khung

Mỗi bài tập có số liệu mới, nên bạn học phương pháp chứ không học thuộc đáp án. Bí rồi? Hãy mở một gợi ý nhỏ trước, và chỉ xem giải thích đầy đủ khi cần.

Cách luyện tập hoạt động

  • Mỗi bài tập có số liệu mới, nên bạn học phương pháp chứ không học thuộc đáp án.
  • Bí rồi? Hãy mở một gợi ý nhỏ trước, và chỉ xem giải thích đầy đủ khi cần.
  • Tiến độ, lỗi sai và các bài đã lưu của bạn được giữ lại, để bạn xem lại trước kỳ thi.

Các chủ đề trước và sau chủ đề này

Học trước

Các môn học có chủ đề này

Thêm chủ đề trong Toán học và thống kê

Phiếu bài tập in được