Trở về đầu

foto1 foto2 foto3 foto4 foto5
Giảng viên
Nguyễn Tô Sơn - Thủ khoa Đại học Sư phạm Hà Nội
ĐT: 091.333.2869

HỌC TIN CÙNG THỦ KHOA

Thành công không phải đích đến, mà là cả một hành trình

Tìm kiếm

Trong các ngôn ngữ lập trình khác, thường một hàm chỉ trả lại duy nhất một giá trị và giá trị này không phải là mảng. Trong trường hợp muốn trả lại nhiều hơn một giá trị, chúng ta dùng khái niệm tham biến. Tuy nhiên trong Python, chúng ta có thể trả lại nhiều hơn một giá trị trong một hàm bằng cách trả lại một list. Chương trình Python sau cho phép tìm các đỉnh liền kề của một đỉnh và cây khung của đồ thị. Hãy chú ý đến hàm tìm cây khung của đồ thị.

graph = \
[[0,1,1,0,0,0],
[1,0,1,1,0,0 ],
[1,1,0,0,1,0 ],
[0,1,0,0,0,1 ],
[0,0,1,0,0,0 ],
[0,0,0,1,0,0 ]]

def InDoThi(g):
    for hang in g:
      print(hang)
    
print("Đồ thị đầu vào:")
InDoThi(graph)

def neighbours(i, g):
  n = len(g)
  res = set() # tạo tập rỗng
  for j in range(n):
    if g[i][j] == 1:
      res.add(j)
  return res

# Chú ý: mảng trong Python đánh chỉ số từ 0 đến n - 1
print("Các đỉnh liền kề với đỉnh ", 4, ": ", neighbours(4, graph))

def empty_graph(n):
  tree = []
  for i in range(n):
    hang = []
    for j in range(n):
      hang.append(0)
    tree.append(hang)
  return tree


def spanning_tree(graph):
  n = len(graph)
  tree = empty_graph(n)
 
  conn = {0}
  while len(conn) < n:
    found = False
    for i in conn:
      for j in range(n):
        if j not in conn:
          if graph[i][j] == 1:
            tree[i][j] = 1
            tree[j][i] = 1
            conn.add(j)
            found = True
            break
      if found == True:
        break
     
    if found == False: # Trường hợp đồ thị không liên thông
        return [False, []]
     
  return [True, tree]


[ok, spanningtree] = spanning_tree(graph)
if ok == True:
  print("Cây khung của đồ thị: ")
  InDoThi(spanningtree)
else:
  print("Không có cây khung do đồ thị không liên thông")

Giảng viên Nguyễn Tô Sơn, Thủ khoa Đại học Sư phạm Hà Nội. Điện thoại: 091.333.2869