Implementation graph using arrays.

Mảng E[k] chứa thông số của cạnh k (ví dụ như đỉnh vào u, đỉnh ra v, trọng số...) và một biến link trỏ tới index tiếp theo trong các cạnh kề với đỉnh u.

Mảng LE[u] chứa đỉnh cuối cùng trong danh sánh các cạnh kề với đỉnh u.

Khởi tạo LE[u] = -1.

Thêm vào một cạnh k nối hai đỉnh (u, v) | add_edge(int e, int u, int v):
  • E[k].u = u, E[k].v = v; // Thêm thông tin cho cạnh.
  • E[k].link = LE[u]; // Trỏ cạnh k tới cạnh cuối cùng trong danh sách kề với u.
  • LE[u] = k; // Lúc này cạnh cuối cùng kề với u là k.
Duyệt các đỉnh kề với đỉnh u.
      for (id = LE[u]; id != -1; id = E[id].link) 
            // Xử lý cạnh u, v.

Đánh giá : Nhanh gọn lẹ. Đồ thị tốt nhất nên tỉnh nhưng cũng dễ sửa thông tin cạnh.

Comments