LH Quảng cáo: lazijsc@gmail.com

Bài tập  /  Bài đang cần trả lời

Viết chương trình đếm số nước liên minh với nước đã cho Yêu cầu: Có N nước, các nước được chia thành các liên minh. Quan hệ liên minh như sau: nếu nước A liên minh với nước B, nước B liên minh với nước C thì nước A liên minh với nước C. Cho biết nước X, sử dụng thuật toán duyệt đồ thị theo chiều rộng, hãy cho biết có bao nhiêu nước liên minh với nước X. Dữ liệu vào: Tệp lienminh.txt chứa dữ liệu của các nước. Hàng đầu tiên là danh sách các nước. Các hàng kế tiếp: mỗi hàng chứa một cạnh gồm hai ...

Viết chương trình đếm số nước liên minh với nước đã cho

Yêu cầu: Có N nước, các nước được chia thành các liên minh. Quan hệ liên minh như sau:

nếu nước A liên minh với nước B, nước B liên minh với nước C thì nước A liên minh với nước C. Cho biết nước X, sử dụng thuật toán duyệt đồ thị theo chiều rộng, hãy cho biết có bao nhiêu nước liên minh với nước X.

Dữ liệu vào: Tệp lienminh.txt chứa dữ liệu của các nước. Hàng đầu tiên là danh sách các nước. Các hàng kế tiếp: mỗi hàng chứa một cạnh gồm hai nước liên minh. Hàng cuối cùng là nước X.

Dữ liệu ra: Số nước liên minh với nước X.

1 trả lời
Hỏi chi tiết
14
0
0
Đặng Bảo Trâm
04/10 22:27:45

Để giải quyết bài toán này, chúng ta sẽ sử dụng thuật toán duyệt đồ thị theo chiều rộng (BFS - Breadth-First Search). Thuật toán này sẽ giúp chúng ta xác định số lượng nước liên minh với nước X từ dữ liệu đã cho.

Các bước giải quyết bài toán:

Đọc dữ liệu từ file: Đọc danh sách các nước và các liên minh từ tệp lienminh.txt. Hàng đầu tiên là danh sách các nước, các hàng tiếp theo là các cặp nước liên minh, và hàng cuối cùng là nước X cần xác định số nước liên minh.

Biểu diễn đồ thị: Sử dụng một danh sách kề để lưu trữ các nước liên minh với nhau.

Duyệt đồ thị bằng BFS: Bắt đầu từ nước X, sử dụng BFS để duyệt qua tất cả các nước liên minh và đếm số lượng nước liên minh này.

Xuất kết quả: In ra số lượng nước liên minh với nước X.

Dưới đây là mã Python để giải quyết bài toán:

from collections import defaultdict, deque

def read_graph_data(filename):

   adjacency_list = defaultdict(list)

    start_node = None

    with open(filename, 'r') as f:

        lines = f.readlines()

       countries = lines[0].strip().split()

       

        for line in lines[1:]:

            if line.strip() == '':

               continue

           node1, node2 = line.strip().split()

            if start_node is None:

               start_node = node1

           adjacency_list[node1].append(node2)

           adjacency_list[node2].append(node1)

       x_country = lines[-1].strip()

    return countries, adjacency_list, x_country

def bfs_count_connected(adjacency_list, start_node):

    visited = set()

    queue = deque([start_node])

   visited.add(start_node)

    count = 0

    while queue:

        node = queue.popleft()

        count += 1

        for neighbor in adjacency_list[node]:

            if neighbor not in visited:

               visited.add(neighbor)

               queue.append(neighbor)

    return count

def main():

    filename = 'lienminh.txt'

    countries, adjacency_list, x_country = read_graph_data(filename)

    if x_country not in adjacency_list:

       print(f"Nước {x_country} không có trong danh sách các nước liên minh.")

        return

   num_connected_countries = bfs_count_connected(adjacency_list, x_country)

   print(f"Số nước liên minh với nước {x_country} là: {num_connected_countries}")

if __name__ == "__main__":

    main()

Mở khóa để xem toàn bộ nội dung trả lời

(?)
Bạn đã đạt đến giới hạn của mình. Bằng cách Đăng ký tài khoản, bạn có thể xem toàn bộ nội dung trả lời
Cải thiện điểm số của bạn bằng cách đăng ký tài khoản Lazi.
Xem toàn bộ các câu trả lời, chat trực tiếp 1:1 với đội ngũ Gia sư Lazi bằng cách Đăng nhập tài khoản ngay bây giờ
Tôi đã có tài khoản? Đăng nhập

Bạn hỏi - Lazi trả lời

Bạn muốn biết điều gì?

GỬI CÂU HỎI
Học tập không giới hạn cùng học sinh cả nước và AI, sôi động, tích cực, trải nghiệm
Bài tập liên quan
Bài tập Tin học Lớp 12 mới nhất

Hôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi

Vui Buồn Bình thường

Học ngoại ngữ với Flashcard

×
Trợ lý ảo Trợ lý ảo
×
Gia sư Lazi Gia sư