Câu hỏi:
26/06/2024 23Cho danh sách kề Adj của đồ thị G. Viết hàm GraphEdge(Adj) trả lại danh sách E các cạnh của đồ thị G. Viết chương trình cho hai trường hợp riêng biệt, G là đồ thị vô hướng và G là đồ thị có hướng.
Siêu phẩm 30 đề thi thử THPT quốc gia 2024 do thầy cô VietJack biên soạn, chỉ từ 100k trên Shopee Mall.
Quảng cáo
Trả lời:
Để viết hàm GraphEdge(Adj) trả về danh sách các cạnh của đồ thị từ danh sách kề Adj, chúng ta cần xác định cách thức biểu diễn cạnh từ danh sách kề. Trong trường hợp đồ thị vô hướng, mỗi cạnh sẽ được biểu diễn một lần. Trong trường hợp đồ thị có hướng, mỗi cạnh sẽ được biểu diễn hai lần (một lần cho mỗi hướng).
Dưới đây là cách triển khai hàm này cho cả hai trường hợp:
def GraphEdgeUndirected(Adj):
edges = []
for i in range(len(Adj)):
for j in Adj[i]:
if j > i: # Chỉ thêm cạnh một lần, tránh trùng lặp
edges.append((i, j))
return edges
# Sử dụng:
Adj_undirected = [
[1, 2],
[0, 3],
[0, 3],
[1, 2]
]
print(GraphEdgeUndirected(Adj_undirected))
- Trường hợp đồ thị có hướng:
def GraphEdgeDirected(Adj):
edges = []
for i in range(len(Adj)):
for j in Adj[i]:
edges.append((i, j))
return edges
# Sử dụng:
Adj_directed = [
[1, 2],
[3],
[3],
[]
]
print(GraphEdgeDirected(Adj_directed))
Trong cả hai trường hợp, chúng ta duyệt qua mỗi đỉnh trong danh sách kề Adj và tạo các cạnh tương ứng dựa trên thông tin trong danh sách kề. Trong trường hợp đồ thị vô hướng, chúng ta chỉ thêm cạnh một lần (đảm bảo tránh trùng lặp). Trong trường hợp đồ thị có hướng, chúng ta thêm cạnh theo cách thông thường. Cuối cùng, chúng ta trả về danh sách các cạnh đã tạo.
CÂU HỎI HOT CÙNG CHỦ ĐỀ
Câu 1:
Một đơn đồ thị, vô hướng có n đỉnh, có thể có số cạnh lớn nhất là bao nhiêu?
Câu 2:
Cho ma trận kề A của đồ thị vô hướng G. Viết hàm GraphEdge(A) trả lại danh sách E các cạnh của đồ thị G.
Câu 3:
Khẳng định dãy Adj[i] có số lượng phần tử bằng số các phần tử có giá trị 1 của hàng thứ i của ma trận kề A là đúng hay sai?
Câu 4:
Tìm hiểu, thảo luận cách thiết lập dữ liệu của đồ thị trong trường hợp tệp dữ liệu biểu diễn danh sách các cạnh.
Câu 7:
Bổ sung thêm đoạn chương trình kiểm tra khi đọc dữ liệu danh sách các cạnh đồ thị của Hoạt động 3 như sau: Với mỗi dòng dữ liệu, nếu hai chỉ số i = j thì bỏ qua dòng này.
về câu hỏi!